怎样让对话框的按钮不响应LBUTTONDOWN消息
在基于对话框的应用中给对话框添加了响应LBUTTONDOWN消息的函数,但是发现
这样做在点击对话框的按钮时也会进入LBUTTONDOWN的函数,而且消息处理似乎到此为止.
ONOK函数不再被调用.现在只能在LBUTTONDOWN函数中检查点击点是否在BUTTON的窗口中,
如果否才进行处理.
请问又什么简单(或者标准)方法吗?
问题点数:50、回复次数:7Top
1 楼dragonex(dragonex)回复于 2000-02-14 18:43:00 得分 20
在pretranslatemessage里面判断,如果是鼠标左键就做你想做的事,然后返回就行了。在pretranslatemessage里要用相应的FLAG哈,就是说处理之后直接删除该消息,不往队列里送了。Top
2 楼qiujoe(迷糊)回复于 2000-02-14 21:52:00 得分 5
不会吧,我用的时候怎么没出现你说的情况
写出你的代码来看看
你用的是SDK还是MFC?Top
3 楼sintony()回复于 2000-02-14 23:47:00 得分 0
重载这个消息不就行了。
用Class Wizard很容易的。Top
4 楼yb()回复于 2000-02-15 10:21:00 得分 20
对于这个问题,在MFC中有两种解决方法:
1.从CButton继承一个你自己的Button类,然后重载OnLButtonDown消息响应函数,在OnLButtonDown中
自己返回TRUE,不要调用它的缺省处理函数。这种方法比较麻烦,但是具有良好的程序结构,程序的
扩展性也很好,在这种方法中,Button实际上响应了WM_LBUTTONDOWN消息,但是你可以把它做的就像没
有响应一样,就是说,它的响应就是没有响应:
class CYourButton:public CButton{
...
}
void CYourDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
...
return TRUE;
}
2.在你的Dialog的WM_LBUTTONDOWN消息响应函数OnLButtonDown中对Mouse的坐标进行判断,如果在你要
处理的Button中,就返回TRUE。这种方法简单易用,但是扩展性很差,在这种方法中,你的Button根本就
不会收到WM_LBUTTONDOWN消息:
BOOL CYourDlg::PreTranslateMessage(MSG* pMsg)
{
CRect rButtonRect;
CButton *pButton = (CButton*)GetDlgItem( IDC_YOURID );
pButton->GetClientRect( &rButtonRect );
pButton->ClientToScreen( &rButtonRect );
ClientToScreen( &point );
if( rButtonRect.PtInRect(point) )
return TRUE;
...
}
Top
5 楼forgettor()回复于 2000-02-15 11:05:00 得分 5
设置标志行不行?如果Dialog已处理过设置标志为true,在按钮的事件里判断一下标志?最好还是用yb的建议吧Top
6 楼whiterabbit()回复于 2000-02-15 16:05:00 得分 0
我找到问题了,原来是我在DLG里用了SetCapture(),这样所有的消息都由DLG来处理了.我用了dragonex建议的方法.yb的建议也给了我很多启发.
感谢大家的帮忙.Top
7 楼Hover(翔)回复于 2000-02-15 18:01:00 得分 0
派生CButton类,在处理LBUTTONDOWN消息的函数中,不调用基类函数即可Top
相关问题
- 对话框中的按钮响应??
- 还有什么别的办法响应对话框上的按钮事件吗??
- 请高手指教:怎么为对话框上的按钮加上键盘响应!
- 为何对话框上添加的button按钮双击无法添加响应事件
- 请问怎样响应保存对话框中的保存按钮的单击事件啊?
- 请问我的主对话框无法响应tab contol 里面的按钮消息?
- 对话框如何响应按键消息?我想用来做按钮快捷键(在线等)
- 对话框上我放了个按钮和编辑框,为何编辑框有焦点时候,能响应:ON_COMMAND(IDOK,OnNewEnter),而按钮有焦点
- 对话框上有一个 ListCtrl,怎么在上面响应鼠标左键按下的消息(WM_LBUTTONDOWN)
- 怎样Enable/Disable对话框的按钮?




