tag:我实现了PreTranslateMessage(),在函数里面加入如下代码:
BOOL CPathCtrl::PreTranslateMessage(MSG* pMsg)
{
// 设置控件拖动
if (pMsg->message==WM_LBUTTONDOWN)
{
FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);
}
return CWnd::PreTranslateMessage(pMsg);
}
加入如下代码导致鼠标OnLButtonUp不响应,我在OnLButtonUp加入MessageBox,没有弹出消息框,做测试中怎么解决?这段代码是什么意思?我也不太理解!希望解释下,谢谢。search result:在网上Google下,没有找到相关的解决方案。在QQ群里也问了,没有很好的解决,希望大家给我提供个解决方案,在一次谢谢大家了
BOOL CPathCtrl::PreTranslateMessage(MSG* pMsg)
{
// 设置控件拖动
if (pMsg->message==WM_LBUTTONDOWN)
{
FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);
}
return CWnd::PreTranslateMessage(pMsg);
}
加入如下代码导致鼠标OnLButtonUp不响应,我在OnLButtonUp加入MessageBox,没有弹出消息框,做测试中怎么解决?这段代码是什么意思?我也不太理解!希望解释下,谢谢。search result:在网上Google下,没有找到相关的解决方案。在QQ群里也问了,没有很好的解决,希望大家给我提供个解决方案,在一次谢谢大家了
OnLButtonUp是在 CPathCtrl 这个类上加的?如果是这样的话,刚试过没问题。把FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);注销试下呢
if (pMsg->message==WM_LBUTTONDOWN) 换成if (pMsg->message==WM_LBUTTONUP)再试.
{
FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);
}
如果鼠标左键按下就移动控件,现在问题是这样 如果执行
FromHandle(pMsg->hwnd)->PostMessage(WM_SYSCOMMAND,SC_MOVE+1,0);
鼠标响应消息就不会被发送到当前控件,因为你移动控件的操作没有结束,这是你在控件上双击鼠标,是可以响应鼠标单击消息的。
正找怎么 结束 SC_MOVE+1 这个消息呢
{
FromHandle(pMsg->hwnd)->SendMessage(WM_SYSCOMMAND,SC_MOVE +1,0);
PostMessage(WM_LBUTTONUP);
}
if(pMsg->message==WM_LBUTTONDOWN)
{
FromHandle(pMsg->hwnd)->SendMessage(WM_SYSCOMMAND,SC_MOVE +1,0);
PostMessage(WM_LBUTTONUP);
}这么写没问题的 注意这2句的顺序 要用SendMessage不用老谢了
PostMessage 是把消息发送到消息队列里不管消息函数是否执行,马上返回,SendMessage是等消息执行完再返回。因为 PostMessage 函数立即返回,而你的鼠标左键没没有松开,所以响应不到lButtonUpSC_MOVE+1,这个参数的低4为是系统用的 +1 +2 +3 都可以,具体原因就不知道了把 Invalidate 放到 OnLButtonUp 的最后试试