您的位置:首页 > 其它

关于OnNcLButtonUp不能响应消息的问题

2009-03-15 20:59 447 查看
我使用了OnNcLButtonDown可以响应消息,之后使用OnNcLButtonUp却不能响应单击消息,但双击能响应。

网上找了些资料,说因为窗口管理器在处理 OnNcLButtonDown 的时候捕捉了鼠标焦点,即使用了 SetCapture 函数,在捕捉了鼠标焦点后,窗口就不会发送 WM_NCLBUTTONUP 消息而会发送 WM_LBUTTONUP 消息。

解决办法:

在你的CXXDialog中的消息处理函数OnSysCommand()(对WM_SYSCOMMAND的响应)添加下面代码:

void CXXXDialog::OnSysCommand(UINT nID, LPARAM lParam)
{
if( (nID & 0xFFF0) == IDM_ABOUTDLG )
{
// 省略...
}
else
{
// 这是本来有的
CDialog::OnSysCommand(nID, lParam);

// 加入下面这2行
if( (nID & 0xFFF0) == SC_MOVE )
PostMessage(WM_NCLBUTTONUP, nID, lParam);
}
}

当DLG收到WM_NCLBUTTONDOWN后, 却省的DefWindowProc会发送WM_SYSCOMMAND, 然后在处理WM_SYSCOMMAND时, 还会有一些消息被发送并处理, 会使WM_NCLBUTTONUP不会被收到, 所以在WM_SYSCOMMAND的处理返回后, 再补发一个WM_NCLBUTTONUP
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: