creportctrl 排序_在CReportCtrl中点击list时的消息拦截

这篇博客介绍了如何在CReportCtrl中设置和拦截勾选事件。通过ON_NOTIFY消息映射和OnCheckBox处理函数,作者实现了在点击列表项时拦截勾选状态改变的功能。在点击事件中,获取行和列信息,然后更改对应行的勾选状态。同时,文章提到了尝试使用CPoint和HitTest方法进行位置判断的未成功尝试,并表达了对进一步学习和改进的期待。
摘要由CSDN通过智能技术生成

该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

{

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值