自定义旋钮控件响应WM_LBUTTONDOWN时很奇怪,求解释
自定义按钮控件响应WM_LBUTTONDOWN时很奇怪,求解释
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
int ButtonId;
ButtonId=GetDlgCtrlID();
GetParent()->PostMessage(WM_MYBUTTON_DOWN,ButtonId,0);
CButton::OnLButtonDown(nFlags, point);
}
如果这样写,从消息响应的效果来看是符合预期要求的。
如果增加一句 MessageBox()(如下所示)后,无论鼠标在哪按下都有反应,这是怎么回事?
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
int ButtonId;
ButtonId=GetDlgCtrlID();
GetParent()->PostMessage(WM_MYBUTTON_DOWN,ButtonId,0);
MessageBox("111");
CButton::OnLButtonDown(nFlags, point);
}
本人新手,可能写的东西问题很多,见笑了
------最佳解决方案--------------------
"MessageBox("111");"
这种调试语句要 慎用 ,它是个 模态 对话框。有时会 出 莫名其妙的问题。
用 afxDump << "111\n";为好 ,也可以SDK (OutputDebugString)
PostMessage(WM_CANCELMODE,0,0) 就是 cancel 模态的。
注意一定是 Post 不能 send
------其他解决方案--------------------
PostMessage(WM_CANCELMODE,0,0);
------其他解决方案--------------------
“无论鼠标在哪按下都有反应”什么反应?
为什么 不用 同步 的 SendMessage
------其他解决方案--------------------
MessageBox("111");
有没有弹出?
------其他解决方案--------------------
试试在MessageBox 后:
PostMessage(WM_CANCELMODE);
------其他解决方案--------------------
解决了,还不结贴?
------其他解决方案--------------------
“无论鼠标在哪按下都有反应”指的是鼠标在任何位置按下去都会调用PostMessage().
我的目的是想在按钮区域内按下鼠标左键才会调用PostMessage()。
------其他解决方案--------------------
有啊,不知道是什么问题
------其他解决方案--------------------
刚刚添加了PostMessage(WM_CANCELMODE,0,0)后可以了。
查了一下WM_CANCELMODE消息,说是取消状态、模式(如鼠标捕获等)。
在这边是因为鼠标被按钮控件捕获了,还是什么原因导致鼠标在任何位置按下去就响应消息?
------其他解决方案--------------------
好的,谢谢各位的热心帮助
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
int ButtonId;
ButtonId=GetDlgCtrlID();
GetParent()->PostMessage(WM_MYBUTTON_DOWN,ButtonId,0);
CButton::OnLButtonDown(nFlags, point);
}
如果这样写,从消息响应的效果来看是符合预期要求的。
如果增加一句 MessageBox()(如下所示)后,无论鼠标在哪按下都有反应,这是怎么回事?
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
int ButtonId;
ButtonId=GetDlgCtrlID();
GetParent()->PostMessage(WM_MYBUTTON_DOWN,ButtonId,0);
MessageBox("111");
CButton::OnLButtonDown(nFlags, point);
}
本人新手,可能写的东西问题很多,见笑了
------最佳解决方案--------------------
"MessageBox("111");"
这种调试语句要 慎用 ,它是个 模态 对话框。有时会 出 莫名其妙的问题。
用 afxDump << "111\n";为好 ,也可以SDK (OutputDebugString)
PostMessage(WM_CANCELMODE,0,0) 就是 cancel 模态的。
注意一定是 Post 不能 send
------其他解决方案--------------------
PostMessage(WM_CANCELMODE,0,0);
------其他解决方案--------------------
“无论鼠标在哪按下都有反应”什么反应?
为什么 不用 同步 的 SendMessage
------其他解决方案--------------------
MessageBox("111");
有没有弹出?
------其他解决方案--------------------
试试在MessageBox 后:
PostMessage(WM_CANCELMODE);
------其他解决方案--------------------
解决了,还不结贴?
------其他解决方案--------------------
“无论鼠标在哪按下都有反应”指的是鼠标在任何位置按下去都会调用PostMessage().
我的目的是想在按钮区域内按下鼠标左键才会调用PostMessage()。
------其他解决方案--------------------
有啊,不知道是什么问题
------其他解决方案--------------------
刚刚添加了PostMessage(WM_CANCELMODE,0,0)后可以了。
查了一下WM_CANCELMODE消息,说是取消状态、模式(如鼠标捕获等)。
在这边是因为鼠标被按钮控件捕获了,还是什么原因导致鼠标在任何位置按下去就响应消息?
------其他解决方案--------------------
好的,谢谢各位的热心帮助