相关链接:
http://www.codeproject.com/KB/combobox/listview.aspx   CodeProject是个非常不错的网站,让我们可以吸收外国同行的编程经验。

Win32 SDK利用ListView控件。
为了使用ListView控件,我们需要初始化公共控件库,我们需要在程序刚刚启动时调用
InitCommonControls() 函数,如果发生链接错误,说明我们没有链接拥有该函数的库文件。它们对应的
头和库 DLL分别为 #include <commctrl.h> comctl32.lib comctl32.dll
为了使用这个控件 我们就需要知道它的窗口类,利用Spy++等文件可以找到指定进程窗口的窗口类,
而一个ListView控件也是一个子窗口,所以我们可以得到它的类名为syslistview32,其他的控件,
我们只需要按照同样的道理来得到类名即可。
有了类名还不够,我们还需要知道每种控件的风格,比如listView控件有以下的风格LVS_REPORT | LVS_SHOWSELALWAYS, 它表示要产生报表和总是显示。为了得到控件的风格,我们可以通过MSDN中MFC中的ListView风格来作参考。有了窗口类和风格,我们利用CreateWindow就可以创建并得到
这个控件的句柄了。有了句柄,我们就可以随便控制了,具体要怎么看你自己的了。

此外为了向ListView内插入项和列,我们需要两个结构体。
LVITEM和LVCOLUMN

它们的定义分别为

typedef struct _LVITEM {     UINT mask;     int iItem;     int iSubItem;     UINT state;     UINT stateMask;     LPTSTR pszText;     int cchTextMax;     int iImage;     LPARAM lParam;#if (_WIN32_IE >= 0x0300)    int iIndent;#endif#if (_WIN32_IE >= 0x560)    int iGroupId;    UINT cColumns; // tile view columns    PUINT puColumns;#endif

typedef struct _LVCOLUMN {     UINT mask;     int fmt;     int cx;     LPTSTR pszText;     int cchTextMax;     int iSubItem; #if (_WIN32_IE >= 0x0300)    int iImage;    int iOrder;#endif} LVCOLUMN, *LPLVCOLUMN; 

} LVITEM, *LPLVITEM;

有了这两个结构体,我们就可以利用SendMessage来给ListView控件发送消息来为它添加项和列。
我们分别通过下面两个消息来添加项和列。
SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
SendMessage(hButton, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn);

LVM_INSERTITEM表示添加项
LVM_INSERTCOLUMN表示添加列。
为了更好的查找关于ListView的消息,我们只需要在网上或MSDN 里查找 LVM_XXXXXX 就可以找到
相关的消息了。最好自己整理出一份关于ListView的全部消息。

WindowFrame &wndFrame = WindowFrame::Instance();
   
    GetWindowRect(hWnd, &rect);
    cx = rect.right-rect.left;
    cy = rect.bottom-rect.top;

switch(msg)
    {
    case WM_CREATE:
        {
            rowIndex = 7;
            hButton = CreateWindow("syslistview32", "",
                                     WS_VISIBLE|WS_CHILD|WS_BORDER|
                                    LVS_REPORT | LVS_SHOWSELALWAYS,
                                    10, 20,
                                    cx-30,
                                    cy-100,
                                    hWnd, NULL, wndFrame.getInstance(), NULL);
            // 添加数据
            LV_ITEM item;       // 项
            LV_COLUMN colmn;     // 列
            ZeroMemory(&item, sizeof(LV_ITEM));
            ZeroMemory(&colmn, sizeof(LV_COLUMN));
           
            colmn.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM; // 风格
            colmn.cx = 0x28;
            colmn.pszText = "进程名"; // 文字
            colmn.cx = 0x42;         // 后面列
            SendMessage(hButton, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn);
            colmn.pszText = "内存使用";
            SendMessage(hButton, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn);
            colmn.pszText = "ID";
            SendMessage(hButton, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn);

// 添加一些行项
            item.mask = LVIF_TEXT;       // 文字
            item.cchTextMax = MAX_PATH;       // 文字长度
            item.iItem = 0;
            item.iSubItem = 0;
            item.pszText = "中国";
            SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
            item.pszText = "日本";
            SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
            item.pszText = "德国";
            SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
            item.pszText = "俄国";
            SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
            item.pszText = "美国";
            SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
            item.pszText = "英国";
            SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
            item.pszText = "法国";
            SendMessage(hButton, LVM_INSERTITEM, 0, (LPARAM)&item);
        }
        break;

转载于:https://www.cnblogs.com/lzjsky/archive/2010/11/24/1886184.html

Win32 SDK创建ListView控件相关推荐

  1. C# 使用ListView控件实现文件查看大图标小图标,详细信息效果

    C# 使用ListView控件实现文件查看大图标小图标,详细信息效果. 前言: 最近的项目需要用到C# 窗体应用里面的ListView,博主这篇文章使用了按钮和快捷菜单进行选择查看视图,实现的是对文件 ...

  2. Android eclipse实现创建水果表并添加信息,将其以ListView控件显示

    Android eclipse实现创建水果表并添加信息,将其以ListView控件显示 整个程序包含:三个.java文件以及两个.xml文件 1.Fruit.java: package com.gpn ...

  3. 【转】 ASP.NET 3.5中使用新的ListView控件

    ASP.NET中新的ListView控件为显示和CURD数据库操作提供了基于模板的布局,使之成为一项极好的方式,建立以数据为中心的Web应用程序. 当你编写以用户为中心的应用程序时,总需要某种形式的数 ...

  4. listview显示mysql数据_C#在listview控件中显示数据库数据

    一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 ...

  5. C# 系统应用之ListView控件 (三).添加ContextMenuStrip右键菜单打开删除文件

    在前面讲述过使用TreeView控件和ListView控件显示磁盘目录信息,但仅仅是显示信息是不够的,我们还需要具体的操作.在"个人电脑使用历史痕迹"项目中我还需要添加" ...

  6. java listview控件_ListView普通列表控件的使用

    Android中的列表空间非常灵活,可以自定义每一个列表项,实际上每一个列表项就是一个View,在Android定义了3个列表控件:ListView.ExpandableListView和Spinne ...

  7. python爬silverlight_Python创建Silverlight控件编写过程经验分享

    Python编程语言可以帮助我们实现哪些功能呢?它的主要应用范围都包括哪些呢?我们今天先来了解一下有关Python创建Silverlight控件的相关实现方法,以此来初步熟悉一下这一语言的应用方式以及 ...

  8. 在ASP.NET 3.5中使用新的ListView控件(2)

    阅读提示:ASP.NET中新的ListView控件为显示和CURD数据库操作提供了基于模板的布局,本文主要集中于使用新的ListView控件时数据访问步骤,同时还包括高级特性如编辑数据和处理事件. 一 ...

  9. 在ASP.NET 3.5中使用新的ListView控件1

    ASP.NET中新的ListView控件为显示和CURD数据库操作提供了基于模板的布局,使之成为一项极好的方式,建立以数据为中心的Web应用程序. 当你编写以用户为中心的应用程序时,总需要某种形式的数 ...

  10. C#如何解决对ListView控件更新以及更新时界面闪烁问题

    第一个问题:如何更新ListView控件内容 很多时候运行窗体程序时,由于程序中使用了多线程加之操作不当,所以在对控件操作时会出现下面这样的异常: 这是因为我们在窗体中添加的控件都有属于自己的线程,所 ...

最新文章

  1. Machine Learning——DAY1
  2. 在maven项目中使用Junit进行单元测试
  3. Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换
  4. boost::posix_time模块实现本地时间和 UTC 之间的转换的测试程序
  5. RocketMQ 消息持久化机制
  6. 中文句法分析、标记规范及其应用
  7. java打印已经被加载的类_使用URLClassLoader加载类,不会报错,但被加载类中的内容也没有打印出来...
  8. idea maven插件tomcat内存溢出
  9. 华为云的研究成果又双叒叕被MICCAI收录了!
  10. 多线程python实现方式_python多线程的两种实现方式(代码教程)
  11. AI一周热闻:北大建立人工智能新校区;英国首例机器人心脏手术致死
  12. 云计算数据与信息安全防护
  13. mysql 并发 加锁_MySQL的并发控制与加锁分析
  14. IOS的Application以及IOS目录的介绍
  15. 基于C++的职工信息管理系统
  16. oracle 怎么写报表,Oracle reports提供的六种风格报表格式
  17. PowerShell报错:无法加载文件C:\Users\server\Documents\windowsPowerShell\profile.ps1...
  18. linux系统中如何查ip,在Linux系统中查看ip的命令是什么
  19. 波兰计算机专业大学排名,波兰留学大学排名
  20. 声音信号希尔伯特黄变换

热门文章

  1. 原生js实现form表单序列化
  2. Android高级控件(六)——自定义ListView高仿一个QQ可拖拽列表的实现
  3. grunt入门讲解4:如何创建task(任务)
  4. 线程通信之handle用法
  5. 一个比较完整的pytorch项目
  6. Java中内存泄漏八种情况的总结
  7. 凸优化第六章逼近与拟合 作业题
  8. SQL Server 和 HSQLDB 中使用 merge into 完成 saveOrUpdate
  9. Python基础(十): 函数的基本概念
  10. Android Transition Framework详解---超炫的动画框架