listctrl控件,点击列头事件OnColumnclick为什么不响应

时间:2022-08-14 19:36:36
窗口上面有一个listctrl控件m_ctrlList,继承CReportCtrl,CReportCtrl是一个扩展的能排序的CListCtrl类.
CReportCtrl里面已经有OnColumnclick函数.

在窗口类里面填加LVN_COLUMNCLICK响应函数
OnColumnclickListstock(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here

*pResult = 0;
}

点击列头的时候,上面事件触发不了

14 个解决方案

#1


这里的类呢::OnColumnclickListstock

#2


afx_msg void OnColumnclickListstock(NMHDR* pNMHDR, LRESULT* pResult);


BEGIN_MESSAGE_MAP(CDlgCallBDWService, CDialog)
//{{AFX_MSG_MAP(CDlgCallBDWService)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LISTSTOCK, OnColumnclickListstock)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


void CDlgCallBDWService::OnColumnclickListstock(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here

*pResult = 0;
}

#3


CReportCtrl m_ctrlList;


DDX_Control(pDX, IDC_LISTSTOCK, m_ctrlList);


CReportCtrl能实现点击列头排序的功能,但是现在我想在点击列头的时候还执行别的操作,但是
void CDlgCallBDWService::OnColumnclickListstock(NMHDR* pNMHDR, LRESULT* pResult) 
根本不触发

#4



窗口类不能响应的原因是:

要在窗口类的初始化函数中,子类化一下CHeadCtrl,加一句
m_ctYourHeader.SubclassWindow(m_pYourListCtrl->GetHeaderCtrl()->GetSafeHwnd());

你在试试!~~

#5


m_ctYourHeader是什么

#6


跟子类化有什么关系。。

#7


从代码看不出什么问题,你在函数里设个断点试试,我以前用都是可以的。实在不行你直接在CReportCtrl的OnColumnclick里改试试可能执行到,估计是list跟变量没有关联好,delete掉重建

#8


m_ctYourHeader就是列头控件

#9


CReportCtrl m_ctrlList;

但是我如果改成 CListCtrl m_ctrlList;

这样就能响应了

CReportCtrl已经是写好的类,不能再改了

#10


feiniaoliang(飞鸟良) :

m_ctYourHeader就是列头控件

怎样得到列头控件,麻烦你说的具体一点,不太明白

#11


我看错问题了!不好意思!~~

#12


mark

#13


mark

#14


CReportCtrl里面已经有OnColumnclick函数.







=============
因为控件中已经处理了,对话框就不能再处理这个消息。
方法是修改控件中的消息返回值,但是这样也不用再对话框中处理了,不如在控件中处理。

#1


这里的类呢::OnColumnclickListstock

#2


afx_msg void OnColumnclickListstock(NMHDR* pNMHDR, LRESULT* pResult);


BEGIN_MESSAGE_MAP(CDlgCallBDWService, CDialog)
//{{AFX_MSG_MAP(CDlgCallBDWService)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LISTSTOCK, OnColumnclickListstock)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


void CDlgCallBDWService::OnColumnclickListstock(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here

*pResult = 0;
}

#3


CReportCtrl m_ctrlList;


DDX_Control(pDX, IDC_LISTSTOCK, m_ctrlList);


CReportCtrl能实现点击列头排序的功能,但是现在我想在点击列头的时候还执行别的操作,但是
void CDlgCallBDWService::OnColumnclickListstock(NMHDR* pNMHDR, LRESULT* pResult) 
根本不触发

#4



窗口类不能响应的原因是:

要在窗口类的初始化函数中,子类化一下CHeadCtrl,加一句
m_ctYourHeader.SubclassWindow(m_pYourListCtrl->GetHeaderCtrl()->GetSafeHwnd());

你在试试!~~

#5


m_ctYourHeader是什么

#6


跟子类化有什么关系。。

#7


从代码看不出什么问题,你在函数里设个断点试试,我以前用都是可以的。实在不行你直接在CReportCtrl的OnColumnclick里改试试可能执行到,估计是list跟变量没有关联好,delete掉重建

#8


m_ctYourHeader就是列头控件

#9


CReportCtrl m_ctrlList;

但是我如果改成 CListCtrl m_ctrlList;

这样就能响应了

CReportCtrl已经是写好的类,不能再改了

#10


feiniaoliang(飞鸟良) :

m_ctYourHeader就是列头控件

怎样得到列头控件,麻烦你说的具体一点,不太明白

#11


我看错问题了!不好意思!~~

#12


mark

#13


mark

#14


CReportCtrl里面已经有OnColumnclick函数.







=============
因为控件中已经处理了,对话框就不能再处理这个消息。
方法是修改控件中的消息返回值,但是这样也不用再对话框中处理了,不如在控件中处理。