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

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_msg		void	OnCheckBox(NMHDR * pNMHDR, LRESULT* pResult);
然后进行编写

void	CMenuKeyView::OnCheckBox(NMHDR * pNMHDR, LRESULT* pResult)
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	const int COL = pNMListView->iSubItem;
	int		nRow = pNMListView->iItem;
	int		nCnt = 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点左边来定位当前位置进行判断的方法,但可惜不对,可能是我还缺少了什么地方的代码,若有人知道的话,不吝指点

// 	CPoint	pt;
// 	GetCursorPos(&pt);
// 	m_listMenu.ScreenToClient(&pt);
// 	int	item;
// 	UINT	nFlag;
// 	item = m_listMenu.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED);
//       m_listMenu.HitTest(pt,&nFlag);

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

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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值