00 ListView中如何使用Check

Post date: 2012/4/5 上午 03:38:52

楼主发表于:2011-02-22 14:39:38

我想在ListView的每一行中都加上Check,方便添加、删除等工作。但是虽然在网上看到了一些有关这方面的介绍。

利用LVS_EX_CHECKABOXES属性,然后通过commctrl.h中的ListView_GetCheckState,即:#define ListView_GetCheckState(hwndLV, i) \

((((UINT)(SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)i, LVIS_STATEIMAGEMASK))) >> 12) -1)

写出:

#ifndef ListView_SetCheckState

#define ListView_SetCheckState(h, i, f) \

ListView_SetItemState(h, i, INDEXTOSTATEIMAGEMASK((f) + 1), LVIS_STATEIMAGEMASK)

#endif

#define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)

最后

为了使用ListView的Check Box,你需要设置LVS_EX_CHECKBOXES风格:

ListView_SetExtendedListViewStyle(hWndList, LVS_EX_CHECKBOXES);

该风格在List的第一列中留出足够的空间,并且在文字的前面画出Check Box。当你想设置Check Box时,你需要调用ListView_SetCheckState控制句柄、Item索引和期望的状态。

ListView_SetCheckState(hWndList, dwIndex, (bState ? 1 : 0));

同样,你可以通过调用ListView_GetCheckState来得到Check Box的状态:

ListView_GetCheckState(hWndList, dwIndex);

但是,在listview控件中并没有check控件。

是不是还需要添加check控件,还有我是用CreateWindow创建的控件,如何用CreateWindow创建CheckBox控件。

希望大家可以帮忙解答一下,小女不胜感谢。

#1楼 得分:10回复于:2011-02-22 15:15:23

#2楼 得分:0回复于:2011-02-23 09:30:19

#3楼 得分:10回复于:2011-02-23 10:05:32

还是楼主哪个地方没处理好,一直用自带的Check Box,都没问题的,贴点儿代码以供参考:

//Create listview

g_hWndListView = CreateWindow(WC_LISTVIEW,

L"LVWindow",

LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,

20, 40, 200, 200,

g_hWndMain,

NULL,

g_hInst,

NULL);

if (g_hWndListView)

{

ShowWindow(g_hWndListView, SW_SHOW);

ListView_SetExtendedListViewStyle(g_hWndListView, ListView_GetExtendedListViewStyle(g_hWndListView) | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);

LVCOLUMN lvc;

LVITEM LvItem;

// Insert column

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM;

lvc.fmt = LVCFMT_LEFT;

lvc.cx = 40;

lvc.iSubItem = 0;

if (ListView_InsertColumn(g_hWndListView, 0, &lvc)== -1)

{

OutputDebugString(L"ListView_InsertColumn failed.");

}

// Insert item

LvItem.mask = LVIF_TEXT | LVIF_STATE;

LvItem.state = 0;

LvItem.stateMask = 0;

LvItem.iSubItem = 0;

LvItem.cchTextMax = 64;

LvItem.pszText = L"123";

LvItem.iItem = 0;

if (ListView_InsertItem(g_hWndListView, &LvItem) == -1)

{

OutputDebugString(L"ListView_InsertItem failed.");

}

}

#4楼 得分:0回复于:2011-08-30 11:10:37

ListView_SetExtendedListViewStyle(g_hWndListView, ListView_GetExtendedListViewStyle(g_hWndListView) | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);

这句话放在这里,当调试代码的时候会崩溃,我的代码就在这句话中崩溃了

自绘,用图

但是我还需要用到Check这个控件呢,自绘如何将Check打钩