我想从listCtrl的头捕获HDN_TRACK
消息,但它从未被通知过。
我测试了HDN_BEGINTRACK
和HDN_ENDTRACK
,它们运行得很好。
我还将消息映射的控制Id更改为IDC_TEST_LIST
和0
,没有区别--它仍然不起作用。
我搜索了很多论坛,但没有找到任何解决办法。
这是我的测试代码。
BEGIN_MESSAGE_MAP(CDlgTest, CDialogEx)
//ON_NOTIFY(HDN_BEGINTRACK, 0, &CDlgTest::OnTrackListTest) // WORKING!!
//ON_NOTIFY(HDN_ENDTRACK, 0, &CDlgTest::OnTrackListTest) // WORKING!!
//ON_NOTIFY(HDN_TRACK, IDC_TEST_LIST, &CDlgTest::OnTrackListTest) // NOT WORKING
ON_NOTIFY(HDN_TRACK, 0, &CDlgTest::OnTrackListTest) // NOT WORKING
END_MESSAGE_MAP()
void CDlgTest::OnTrackListLog(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
// TODO: Add your control notification handler code here
AfxMessageBox(L"Hello!!!"); // >>>>>>>>>>> NOT showing up
*pResult = 0;
}
class CDlgTest : public CDialogEx {
public:
afx_msg void OnTrackListLog(NMHDR* pNMHDR, LRESULT* pResult);
}
我附上了我访问过的一些论坛:
接下来我能试试什么?
发布于 2021-08-24 19:02:17
首先,尝试HDN_TRACKA
或HDN_TRACKW
而不是HDN_TRACK
,看看这些方法是否有效。通常,根据项目设置,HDN_TRACK
被正确地定义为两者之一,但最好两者都尝试。
此外,在带有找到样式集的列表控件发送HDN_ITEMCHANGING
而不是HDN_TRACK
通知的i-net和HDN_TRACK
上搜索了一些信息。这篇文章可以追溯到2004年!
因此,您可以尝试删除该样式(如果这对您来说还行),也可以尝试捕获HDN_ITEMCHANGING
通知。可以通过更改初始创建样式(如果是以编程方式创建)、更改资源文件(如果使用对话框资源创建)更改资源文件(或使用属性编辑器),或者在创建后调用GetWindowLong()
/SetWindowLong()
来设置或删除该样式。
https://stackoverflow.com/questions/68616247
复制相似问题