读书人

ListCtrl中增添check box 列表框中

发布时间: 2012-09-16 17:33:17 作者: rapoo

ListCtrl中添加check box 列表框中添加复选框 请大侠帮忙!!!
我现在想在Listctrl中添加 check box 控件,我想在任意一列或者几列,请大侠帮忙!有源码可以发到邮箱zw.0558@163.com

[解决办法]
创建CheckBox控件,然后自己动态MoveWindow等移动到你对应的列的位置
[解决办法]
1. 做一个48*24的bitmap,表示off 和 on
2. 贴一个listctrl
3. 关联变量m_List
4. 在类里面追加 CImageList m_imglstList;
5. 填写下面两个函数

BOOL CLstChkDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// "バジョン情..." メニュ目をシステム メニュへ追加します。
// IDM_ABOUTBOX はコマンド メニュのでなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE); // 大きいアイコンを定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを定

// TODO: 特な初期化を行うはこの所に追加してください。

m_imglstList.Create(IDB_BITMAP1, 24, 1, (COLORREF)(0x123456));
m_List.SetImageList(&m_imglstList, LVSIL_SMALL);
m_List.InsertColumn(0, "data1", LVCFMT_LEFT, 70);
m_List.InsertColumn(0, "data2", LVCFMT_LEFT, 70);
m_List.InsertColumn(0, "data3", LVCFMT_LEFT, 70);
for (int i = 0; i < 10; i ++)
{
m_List.InsertItem(i, "datax", 0);
m_List.SetItem(i, 1, LVIF_TEXT, "lpszItem", 0,0,0,0);
m_List.SetItem(i, 2, LVIF_TEXT, "lpszItem", 0,0,0,0);
m_List.SetItemData(i, 0);
}

return TRUE; // TRUE を返すとコントロルに定したフォカスは失われません。
}

void CLstChkDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: この位置にコントロル通知ハンドラ用のコドを追加してください
CPoint pt;
GetCursorPos(&pt);
m_List.ScreenToClient(&pt);

CRect r;
m_List.GetClientRect(&r);

int nRow = m_List.HitTest(pt);
if (pt.x < r.left + 24)
{
if (nRow >= 0)
{
BOOL fCheck = !m_List.GetItemData(nRow);
m_List.SetItem(nRow, 0, LVIF_IMAGE, NULL, fCheck?1:0,0,0,0);
m_List.SetItemData(nRow, fCheck);
}
}

*pResult = 0;
}
[解决办法]
CCheckListBox , MFC中的标准类

通过 CCheckListBox::GetCheck/SetCheck 操作每个item的check状态
[解决办法]
hListWnd= CreateWindow( L"LISTBOX", L"", WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_HSCROLL | LBS_NOTIFY, 0, 50, 200, 300, hWnd, (HMENU)100, hInst, NULL );
hCheckWnd= CreateWindow( L"button", L"", WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, 0, 0, 20, 20, hListWnd, (HMENU)101, hInst, NULL );

注意,一定要设置Checkbox为ListBox的子窗口
[解决办法]
>>48*24的bitmap,表示off 和 on
大小可根据喜好来定。还可以用它来表示off和on以外的意思。

读书人网 >VC/MFC

热点推荐