读书人

clistctrl怎么复选?不需要按住ctrl键

发布时间: 2013-12-06 17:56:43 作者: rapoo

clistctrl如何复选?不需要按住ctrl键??
现在要做一个功能,listctrl复选,不需要按住ctrl,如何实现啊
[解决办法]
用选择框比较好!!

m_List.ModifyStyle(LVS_TYPEMASK, LVS_REPORT 
[解决办法]
LVS_SHOWSELALWAYS
[解决办法]
LVS_SINGLESEL);
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT
[解决办法]
LVS_EX_GRIDLINES
[解决办法]
LVS_EX_CHECKBOXES);


m_List.InsertColumn(0, _T("第一列"), LVCFMT_LEFT, 100);
m_List.InsertColumn(1, _T("第二列"), LVCFMT_LEFT, 100);
m_List.InsertItem(m_List.GetItemCount(),_T("1"));
m_List.SetItemText(m_List.GetItemCount()-1,1,_T("数据1"));
m_List.SetItemText(m_List.GetItemCount()-1,2,_T("数据2"));

[解决办法]

BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if((WM_LBUTTONDOWN == pMsg->message) && (m_list.GetSafeHwnd() == pMsg->hwnd))
{
CPoint pt;
GetCursorPos(&pt);
m_list.ScreenToClient(&pt);
LVHITTESTINFO info = {0};
info.pt = pt;
info.flags = LVHT_ONITEMLABEL;
if(-1 != m_list.SubItemHitTest(&info))
{
CString str;
str.Format(_T("%d, %d"), info.iItem, info.iSubItem);
SetWindowText(str);
m_list.SetItemState(info.iItem, (LVIS_SELECTED == m_list.GetItemState(info.iItem, LVIS_SELECTED) ? 0 : LVIS_SELECTED), LVIS_SELECTED);
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}

至于需要高亮蓝色,你可能需要自绘,处理DrawItem虚函数
[解决办法]
引用:
现在要做一个功能,listctrl复选,不需要按住ctrl,如何实现啊


想这样的需求如果你不需要自绘,直接用更改State的做法,那么你在以后将很难进行控制.
最好的方法是自绘.

读书人网 >VC/MFC

热点推荐