最近在使用XTreme Toolkit,用到其中的报表控件CXTPReportControl,我现在想实现CXTPReportControl的列标题鼠标单击事件。记得在MFC的CListCtrl中有LVN_COLUMNCLICK单击列标题消息,在CXTPReportControl就不太清楚了。我阅读了帮助文档,上面说ON_NOTIFY事件有以下几种:
ON_NOTIFY(NM_CLICK, ID_REPORT_CONTROL, OnReportItemClick)//鼠标单击列表行事件
ON_NOTIFY(NM_RCLICK, ID_REPORT_CONTROL, OnReportItemRClick)//鼠标右键单击列表行事件
ON_NOTIFY(NM_DBLCLK, ID_REPORT_CONTROL, OnReportItemDblClick)//鼠标单击列表行事件
ON_NOTIFY(XTP_NM_SHOWFIELDCHOOSER, ID_REPORT_CONTROL, OnShowFieldChooser)?
ON_NOTIFY(XTP_NM_HEADER_RCLICK, ID_REPORT_CONTROL, OnReportColumnRClick)?
ON_NOTIFY(NM_KEYDOWN, ID_REPORT_CONTROL, OnReportKeyDown)某个键被按下
我想XTP_NM_HEADER_RCLICK应该是列标题右击事件吧,于是我添加此消息响应,并添加了头文件XTPReportControl.h,但编译error C2065: 'XTP_NM_HEADER_RCLICK' : undeclared identifier。
由于初用XTreme Toolkit,实在不知道怎么回事,请高手指点一下,谢谢啦~

解决方案 »

  1.   

    Conry,你好,我查了一下参考文档,发现CXTPReportControl确实有一个XTP_NM_REPORT_HEADER_RCLICK宏, 在XTPReportDefines.h中定义。 这个是列标题右击事件。CXTPReportControl本来就有列标题左击排序事件,那么如何实现自定义列标题左击事件呢?
      

  2.   

    NM_CLICK就是左击事件啊
    如果不想自动排序那么调用CXTPReportColumn::SetSortable();
      

  3.   

    Conry,你好。我知道NM_CLICK就是左击事件,不过它是列表视图的左击事件,但不是列标题的左击事件!
    我现在的意思是想覆写CXTPReportControl的左击排序事件,查找了一下XTP_NM_REPORT_HEADER_也只有右击RCLICK宏。我又找到了XTP_NM_REPORT_SORTORDERCHANGED消息宏,这个就是列标题左击排序事件,可以添加这个消息处理,则在左击排序同时添加自己的处理。问题是,我现在想在左击列标题时不做排序,而作自己的处理,这个就不知道怎么办了?
      

  4.   

    重载CXTPReportHeader,重写它的虚函数void CXTPReportHeader::OnLButtonDown(CPoint ptClick)。
    再重载CXTPReportControl,在你重载的CXTPReportControl的构造函数中调用你自己的CXTPReportHeader