【问题标题】:Never notify HDN_TRACK message of CListCtrl's CHeaderCtrl永远不要通知 CListCtrl 的 CHeaderCtrl 的 HDN_TRACK 消息
【发布时间】:2021-10-07 11:47:48
【问题描述】:

我想从 listCtrl 的标头中捕获 HDN_TRACK 消息,但从未收到通知。

我测试了HDN_BEGINTRACKHDN_ENDTRACK,它们运行良好。

我还将消息映射的 Control Id 更改为 IDC_TEST_LIST0,没有区别 - 它仍然无法正常工作。

我搜索了很多论坛,但我找不到任何解决方案。

这是我的测试代码。


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);
}

我附加了一些我访问过的论坛:

接下来我可以尝试什么?

【问题讨论】:

    标签: c++ winapi mfc clistctrl


    【解决方案1】:

    这是标题控件的奇怪行为,在 HDN_TRACK and HDS_FULLDRAG 也由 @Constantine 发布

    您必须从OnInitDialog 的标题控件中删除HDS_FULLDRAG 样式:

    m_list.GetHeaderCtrl()->ModifyStyle(HDS_FULLDRAG, 0);
    

    那么你应该会收到HDN_TRACK 消息

    void CDlgTest::OnTrack(NMHDR* pNMHDR, LRESULT* pResult)
    {
        TRACE(L"OnTrack\n");
        *pResult = 0;
    }
    
    ON_NOTIFY(HDN_TRACK, 0, OnTrack)
    

    但现在你没有HDS_FULLDRAG 风格!如果需要HDS_FULLDRAG 标志,则不要更改OnInitDialog。相反,您可以启用/禁用HDS_FULLDRAG 以响应HDN_BEGINTRACK/HDN_ENDTRACK

    【讨论】:

      【解决方案2】:

      首先尝试HDN_TRACKAHDN_TRACKW 而不是HDN_TRACK,看看这些是否有效。通常HDN_TRACK 会根据您的项目设置正确定义为两者之一,但最好同时尝试。

      此外,在 i-net 和 found 上搜索了一下,发现具有 HDS_FULLDRAG 样式集的列表控件发送 HDN_ITEMCHANGING 而不是 HDN_TRACK 通知。这篇文章可以追溯到2004年!...

      因此,您可以尝试删除该样式(如果您可以这样做),或者改为捕获HDN_ITEMCHANGING 通知。如果样式是通过程序创建的,可以通过更改初始创建样式标志来设置或删除样式,如果是使用对话框资源创建的,则可以通过更改资源文件(或使用属性编辑器),或者通过调用GetWindowLong()/@987654331 @创建后。

      【讨论】:

        猜你喜欢
        • 2019-02-22
        • 2015-07-21
        • 1970-01-01
        • 2021-04-15
        • 1970-01-01
        • 2018-06-11
        • 2010-10-07
        • 2019-04-28
        • 2013-05-13
        相关资源
        最近更新 更多