VC中怎样使用列表控件

来源:互联网 发布:淘宝怎么取消小儿介入 编辑:程序博客网 时间:2024/04/28 17:55

转载请声明出处!!!谢谢!!!

在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);
}

 

运行效果如下图

 

 

原创粉丝点击