您的位置:首页 > 其它

VC中怎样使用列表控件

2012-07-26 02:03 417 查看
转载请声明出处!!!谢谢!!!

在VC进行对话框等Windows编程的时候经常需要以报表的形式对处理的数据进行输出,最常用的就是对数据库查询的结果进行输出。因此就要采用列表控件进行报表式的输出。但是怎样使用呢?本人开始进行Windows 编程时也遇到这个问题,但是网上全是MFC一类的介绍,看不懂(本人智商那啥啊)!!!经过最近几天的研究终于解决了,VC在进行对话框编程时怎样使用列表控件。

首先建立一个对话框工程(一般Windows编程的工程也行)建立对话框工程见VC怎样建立对话框工程

下来看看我们需要知道的两个结构体,进行列表控件的操作必然离不开这两个结构体LVCOLUMN、LVITEM。下来进行介绍。

1、列的操作

LVCOLUMN包含了列表控件的列的控制信息,其中包含列的宽度、高度、格式、列名等重要信息。这里就不多少了,想必操作列表控件的人对这个应该不陌生的。

重点说明怎样使用它。比如我们要四列,则我们定义LVCOLUMN column[4];这个数组每一个元素包含每一列的信息。然后对每一列的具体情况设置清除后,怎样将这个列加入到我们的列表控件呢?采用SendDlgItemMessage()API函数,这个是向控件发消息,很常用,向其他控件发消息也可以用这个函数,具体参数见MSDN。

这里给出在列表控件怎样用

SendDlgItemMessage(hwnd, IDC_LIST1, LVM_INSERTCOLUMN,0, (LPARAM)&column[0]);

第一个参数是窗口句柄,第二个是列表控件的ID,第三个不用管照抄就行,第四个是那一列(列表控件的行和列都是从0开始排序),最后一个是这一列的具体参数,由上面结构体数组设定。这样向每一列发送消息完成后就完成了对列表控件的列的操作。

2、向每一行插入数据

对行的操作我们采用LVITEM结构体,这个结构体包含了每一行每一个格子的具体信息,包括,输入内容的格式、输入的主行号、和列好。这个结构体包含两个重要的参数iItem、iSubItem。在使用之前我们要弄清楚这两个参数的含义。网上说iItem可以看作是行号,iSubItem看作列好,记住紧紧是看作,并不是真的行和列。如果那样想的话,只要对不同的iItem和iSubItem进行赋值然后采用ListView_InsertItem()进行插入就可以对列表控件每一个格子进行操作了,但是大家可以去试,发现不论怎么变,永远只能在第一列插入。这就是网上就常问的为什么列表控件只插入了第一列数据。

这是因为,列表控件分为主行号和从行号,LVITEM里面的iItem是设置这一行的主行号,所以看起来就像行。iSubItem一般是0,表示这个表格的最开始一列作为每一行的主行号。采用ListView_InsertItem()只是对主行号进行设定,因此在添加数据时永远都添加在了第一行。因此,对每一行的操作,我们用iItem设定好主行号(这个是系统逐次增加的,但是在设定使依旧要按顺序增加,如果自己乱写则加不进去)后,采用ListView_SetItemText()API函数对每一行的某一列进行添加数据。即可。话不多说了,上一个完整的例子大家理解就会更加深刻。

创建一个对话框工程,在对话框的主函数中赋值下列代码即可:

#include "StdAfx.h"

#include <windowsx.h>

#include <windows.h>

#include <commctrl.h>

#include "resource.h"

#include "MainDlg.h"

#pragma comment(lib, "ComCtl32.lib ")

void InitListView(HWND hwnd)

{

HWND hwndListView=GetDlgItem(hwnd,IDC_LIST1);

//设置列表框控件格式

DWORD dwExStyle =LVS_EX_CHECKBOXES|LVS_EX_GRIDLINES;

ListView_SetExtendedListViewStyle(hwndListView,dwExStyle);

//设置列

LVCOLUMN column[4];

column[0].mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;

column[0].pszText = "A ";

column[0].fmt = LVCFMT_CENTER;

column[0].cx = 80;

column[1].mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;

column[1].pszText = "B ";

column[1].fmt = LVCFMT_CENTER;

column[1].cx = 80;

column[2].mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;

column[2].pszText = "C ";

column[2].fmt = LVCFMT_CENTER;

column[2].cx = 80;

column[3].mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;

column[3].pszText = "D ";

column[3].fmt = LVCFMT_CENTER;

column[3].cx = 80;

SendDlgItemMessage(hwnd, IDC_LIST1, LVM_INSERTCOLUMN,0, (LPARAM)&column[0]);

SendDlgItemMessage(hwnd, IDC_LIST1, LVM_INSERTCOLUMN,1, (LPARAM)&column[1]);

SendDlgItemMessage(hwnd, IDC_LIST1, LVM_INSERTCOLUMN,2, (LPARAM)&column[2]);

SendDlgItemMessage(hwnd, IDC_LIST1, LVM_INSERTCOLUMN,3, (LPARAM)&column[3]);

//插入信息

LVITEM lvItem;

//定义第一列信息

lvItem.mask = LVIF_TEXT;

lvItem.iItem = 0;

lvItem.iSubItem = 0;

lvItem.pszText = TEXT("葵");

//插入第一行

ListView_InsertItem(hwndListView,(LPARAM)&lvItem);

//或者用下面代替

// SendDlgItemMessage(hwnd, IDC_LIST1, LVM_INSERTITEM, 0, (LPARAM)&lvItem);

// ListView_SetItemText(hwndListView, 0, 1, TEXT("love"));

//插入第一行其他列数据

ListView_SetItemText(hwndListView, 0, 1, TEXT("花"));

ListView_SetItemText(hwndListView, 0, 2, TEXT("宝"));

ListView_SetItemText(hwndListView, 0, 3, TEXT("典"));

//设置第二列

lvItem.iItem = 1;

lvItem.iSubItem = 0;

lvItem.pszText = TEXT("天");

//插入第二行

ListView_InsertItem(hwndListView,(LPARAM)&lvItem);

//插入第二列其他数据

ListView_SetItemText(hwndListView, 1, 1, TEXT("下"));

ListView_SetItemText(hwndListView, 1, 2, TEXT("第"));

ListView_SetItemText(hwndListView, 1, 3, TEXT("一"));

}

BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

switch(uMsg)

{

HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);

HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);

HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);

}

return FALSE;

}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)

{

InitListView(hwnd);

return TRUE;

}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{

;

}

void Main_OnClose(HWND hwnd)

{

EndDialog(hwnd, 0);

}



运行效果如下图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: