【发布时间】:2014-09-08 14:24:55
【问题描述】:
我目前正在处理属性表,其中我的第二页包含一个列表控件。我已将复选框添加到列标题并使用 LVS_EX_CHECKBOX 样式设置列表控件。所以,现在第一个列及其标题由复选框组成.
当我一一检查与项目对应的复选框时,当我检查列表的最后一个项目复选框时,标题复选框也被选中。到此为止没问题。现在我取消选择所有复选框并现在尝试单击标题复选框以设置所有项目复选框的检查状态。不幸的是,我无法选中列表项复选框。只有该标题复选框被选中和取消选中。
在页面类中按如下方式在listheader中添加checkbox。
BOOL OnInitDialog()
{
DWORD dwStyle = ::GetWindowLong(header, GWL_STYLE);
dwStyle |= HDS_CHECKBOXES;
::SetWindowLong(header, GWL_STYLE, dwStyle);
m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() |
LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
}
我尝试处理以下事件以获取列标题复选框单击
HDN_ITEMCLICK
HDN_ITEMSTATEICONCLICK
//这是在 LVN_ITEMCHANGED 事件处理程序中实现的(当逐个检查列表项复选框并在列表中进行最终检查时,我正在设置标题复选框)。
void CMFPSearchListView::OnListViewItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LVCOLUMN pColumn = {0};
pColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
m_listCtrl.GetColumn(0, &pColumn);
if(blAllChecked)
pColumn.fmt |= HDF_CHECKED;
else
pColumn.fmt &= ~HDF_CHECKED;
//m_listCtrl.InsertColumn(1, &pColumn);
m_listCtrl.SetColumn(0, &pColumn);
*pResult=0;
}
如果我没有触发正确的事件,谁能告诉我。 任何帮助表示赞赏。
【问题讨论】:
标签: visual-c++ mfc