在CReportCtrl中点击list时的消息拦截

来源:互联网 发布:淘宝首页都设置在哪 编辑:程序博客网 时间:2024/06/08 07:02

该CReportCtrl来自codeproject上一位作者的作品,主要看中其中的checkbox效果,所以拿来使用进行显示,效果没那么炫,但足够我用的了。

在对其设置checkbox之后

m_listMenu.SetCheckboxeStyle(RC_CHKBOX_NORMAL); // Enable checkboxes
在点击时可以实现勾选的效果,但是,若是要拦截勾选动作在该动作进行其他操作时,如何进行拦截呢。

我也在网上找了好久,虽然没有特别关于该list的拦截说明,但是经过其他的内容,实验了出来一点效果,至于是不是真的

符合原始的想法,那还不得而知,当前水平有限,若有错误请指出来。

利用ON_NOTIFY来拦截NM_CLICK消息,

ON_NOTIFY(NM_CLICK,IDC_LIST_MENU,OnCheckBox)
在.h文件中定义

afx_msgvoidOnCheckBox(NMHDR * pNMHDR, LRESULT* pResult);
然后进行编写

voidCMenuKeyView::OnCheckBox(NMHDR * pNMHDR, LRESULT* pResult){NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;const int COL = pNMListView->iSubItem;intnRow = pNMListView->iItem;intnCnt = m_listMenu.GetItemCount();int nState;if (COL==0 ){if(nRow>0 && nRow<nCnt){nState = m_listMenu.GetCheck(nRow);nState = !nState;SetMenuVal(nRow-1,nState);}}}
根据命名可以看出来变量,一个是行,一个是列,还有一个是总行数。

而上面的命名,则是在调试时的变量值改变推测出来的,但是这个结构还有其他的变量,还不知道用途。

而在这个出来效果之前,我试着尝试了用cpoint点左边来定位当前位置进行判断的方法,但可惜不对,可能是我还缺少了什么地方的代码,若有人知道的话,不吝指点

// CPointpt;// GetCursorPos(&pt);// m_listMenu.ScreenToClient(&pt);// intitem;// UINTnFlag;// item = m_listMenu.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED);
//       m_listMenu.HitTest(pt,&nFlag);

这段代码的思路是不是正确的,我自己也不知道,因为没有得出想要的结果,所以暂时无从验证,若是后期有所得,在来修改下。

先记录下,若是在其他控件中也得对点击事件进行拦截,在继续记录吧






原创粉丝点击