CButton的WM_LBUTTONDOWN消息捕获

zcy_beijing 2004-09-22 03:46:19
我用的CButtonST类,想捕获该类的WM_LBUTTONDOWN消息,怎么在父窗口中捕获按钮的WM_LBUTTONDOWN消息?我对CButtonST进行继承,生成的新类中对WM_LBUTTONDOWN进行处理,把消息转发到父窗口,但是这样导致按钮上按下鼠标左键后,按钮外观没有改变,正常应该是按钮陷下去,请问如何解决?void CButtonSTEx::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CButtonST::OnLButtonDown(nFlags, point);
CPoint pt(point);
ClientToScreen(&pt);
GetParent()->ScreenToClient(&pt);
GetParent()->PostMessage(WM_LBUTTONDOWN , nFlags, MAKELONG(pt.x , pt.y));
}
谢谢!
...全文
304 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcy_beijing 2004-09-23
  • 打赏
  • 举报
回复
因为我的按钮是放在一个控件里,结果会出现如题所说问题。如果是放在对话框中没有问题,不知道是什么原因。
zcy_beijing 2004-09-23
  • 打赏
  • 举报
回复
westwind999(书山云) ,我没有理解错继承和子窗口的概念,我是想在对话框中知道按钮按下的消息,做相应的处理。在对话框中直接用WM_LBUTTONDOWN消息的映射是不行的,因为只有点到对话框的空白地区才会向对话框发送WM_LBUTTONDOWN消息。
kugou123 2004-09-22
  • 打赏
  • 举报
回复
void CButtonSTEx::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CButtonST::OnLButtonDown(nFlags, point);//这里去掉试试
CPoint pt(point);
ClientToScreen(&pt);
GetParent()->ScreenToClient(&pt);
GetParent()->PostMessage(WM_LBUTTONDOWN , nFlags, MAKELONG(pt.x , pt.y));
}
有点不明白你的代码,你在这个函数开始的时候,已经调用了基类的OnLButtonDown()函数了,为什么你后来又要用PostMessage继续传一个鼠标左键按下的消息呢?你先把我注释那行去掉试试看。
westwind999 2004-09-22
  • 打赏
  • 举报
回复
你大概理解错了继承类和子窗口的概念了。你既然继承了CButton类,也就是说,你通过新类创建了一个Button窗口,此窗口的父窗口应该是对话框之类的。这样的话,你为什么还要传递WM_LBUTTONDOWN给父窗口呢。
如果我没有理解错误的话,你需要的是WM_LBUTTONDOWN操作后所发生的操作,直接在刚才那个函数中定义即可了。如果需要告诉父窗口,此Button被按下了(记住,父窗口需要的是一个过程,不是一个状态),你可以在函数中保留CButtonST::OnLButtonDown(nFlags, point),或者在别的函数中通过
GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID(), NULL)也可。
lyf_sky 2004-09-22
  • 打赏
  • 举报
回复
WM_LBUTTONDOWN不能发送给父窗口吧,只有WM_COMMAND消息才能发送给其他类响应(好像是吧).
lbird 2004-09-22
  • 打赏
  • 举报
回复
为什么还要把WM_LBUTTONDOWN发给父窗口??
老夏Max 2004-09-22
  • 打赏
  • 举报
回复
你最好还是在使用的地方直接映射WM_LBUTTONDOWN 消息。在对话框程序中,拖放一个Button控件,然后在Classwizard中定义一个Button变量,在头文件中找到将CButton改为CButtonSTEx就应该可以了!
老夏Max 2004-09-22
  • 打赏
  • 举报
回复
如果是这样,你使用::PostMessage(hWnd,WM_LBUTTONDOWN , nFlags, MAKELONG(pt.x , pt.y));试试,Hwnd是对话框的Hwnd,可以使用GetSafeHwnd()获得,然后传入 CButtonSTEx就可以了

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧