关于按钮处理自身BN_CLICK消息的问题

来源:互联网  时间:2016/7/2 13:08:05

关于网友提出的“ 关于按钮处理自身BN_CLICK消息的问题”问题疑问,本网通过在网上对“ 关于按钮处理自身BN_CLICK消息的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于按钮处理自身BN_CLICK消息的问题
描述:

按钮BN_CLICK

我想在自己的按钮类中处理BN_CLICK消息是否返回, 该怎么做. 我是想实现, 在BN_CLICK通知消息未返回时, 按钮始终显示按下状态. 但又不想自己处理WM_LBUTTONDOWN消息, 因为这个消息处理了很多东西, 比如焦点, 鼠标捕获等等, 因为还不完全确定按钮原生的WM_LBUTTONDOWN响应中处理些什么东西.
最好是能知道BN_CLICK消息的处理. (从按钮内部)
实在没办法, 也可以说说WM_LBUTTONDOWND时, 按钮的默认处理都做了些什么?
谢谢大家了.
解决方案1:

ON_CONTROL_REFLECT_EX(BN_CLICKED, OnClicked)
OnClicked 根据你的需要设置状态,然后自己控制返回值,如果return TRUE那么窗体点击事件无效。
相反,则有效。
我自己自绘checkbox/radiobox就这样处理。

解决方案2:

引用 33 楼 xiaohuh421 的回复:
up的时候弹出没关系,只要是能确定BN_CLICKED消息已经响应完成, 即可,关键在于此.

按钮的WindowProc处理WM_LBUTTONUP是最后才SendMessage给父窗口的,你先让它自己处理就行了

void CMyButton::OnLButtonUp(UINT nFlags, CPoint point) 
{
  CButton::OnLButtonUp(nFlags, point);
  //这里BN_CLICKED就已经响应完成了
}

解决方案3:

楼主说的BN_CLICK应该是BN_CLICKED吧
父窗口接收到BN_CLICKED的时候已经是lbuttonup的了
按ComboBox那种应该是lbuttondown就弹菜单

解决方案4:

试试 BS_AUTOCHECKBOX | BS_PUSHLIKE
然后可以自己发消息控制它的状态

解决方案5:

如果你一定要处理,我觉得不如处理onlbuttonup,但是你父窗口始终得给他一个事件结束弹起的通知,这又何必呢

解决方案6:

你这本身就不和逻辑吧,本身就该是父窗口处理其click事件,然后setstate不弹起,等待popup菜单处理结束再setstate回来

解决方案7:

ON_CONTROL_REFLECT_EX(BN_CLICKED, OnClicked)
afx_msg BOOL OnClicked();
注意这个 BOOL OnClicked(); 是有 返回值的 ,FALSE 表示父窗口 还可以响应(处理)。

解决方案8:

那就在 WM_LBUTTONUP 中 SendMessage
GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID(), m_hWnd);
return 0;

解决方案9:

反射消息
ON_CONTROL_REFLECT_EX( BN_CLICKED 

上一篇如何获取桌面图标信息
下一篇怎样用VC画坐标轴 并且标上自己想标的坐标
明星图片
相关文章
《 关于按钮处理自身BN_CLICK消息的问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)