我有一个非常简单的对话框,基本上在报告模式下包含一个CListCtrl
,其中包含多列和标题。
现在,我需要检测用户何时调整了列的大小,并希望每次用户调整列的大小时都会调用OnHdnChanged
。
在其他人中,我的消息映射中有这个,IDC_LIST1
是列表控件的ID。
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemchangedList)
ON_NOTIFY(HDN_ENDTRACKW, IDC_LIST1, OnHdnChanged)
OnHdnChanged
功能:
void CMyDlg::OnHdnChanged(NMHDR* pNMHDR, LRESULT* pResult)
{
...
*pResult = 0;
}
void CSanDlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
...
可能会调用 OnItemchangedList
,但不会调用OnHdnChanged
。我认为未调用OnHdnChanged
是因为标头控件的父级不是我的对话框,而是列表控件。
有人知道我能做什么吗?
答案 0 :(得分:3)
我只是看着这个old article,这建议将ON_NOTIFY
更改为ON_NOTIFY(HDN_ENDTRACKW, 0, OnHdnChanged)
,因为标头控件的控件ID似乎总是为0。
我不知道这是否仍然正确,但是值得检查。
编辑:根据响应评论进行更新。 Here是我遇到的另一个建议,它是CListCtrl
的子类并在那里处理通知。大概该处理程序可以将实际的处理逻辑委托给其父级。