我用的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));
}
谢谢!
{
// 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));
}
谢谢!
如果我没有理解错误的话,你需要的是WM_LBUTTONDOWN操作后所发生的操作,直接在刚才那个函数中定义即可了。如果需要告诉父窗口,此Button被按下了(记住,父窗口需要的是一个过程,不是一个状态),你可以在函数中保留CButtonST::OnLButtonDown(nFlags, point),或者在别的函数中通过
GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID(), NULL)也可。
{
// 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继续传一个鼠标左键按下的消息呢?你先把我注释那行去掉试试看。