如何实时响应鼠标按下后拖动的消息
比如在树控件或listctrl控件里拖动文件时,控件会根据鼠标的位置实时反映,比如展开树节点。而我在自己的程序里却不能收到鼠标按下时拖动的消息(强调一下,就是鼠标在其他窗...
比如在树控件或listctrl控件里拖动文件时,控件会根据鼠标的位置实时反映,比如展开树节点。而我在自己的程序里却不能收到鼠标按下时拖动的消息(强调一下,就是鼠标在其他窗口按下一个文件,拖动到我的窗口,但我的窗口不能捕获到鼠标WM_MOUSEMOVE的消息)用spy++也发现自己的程序窗口没有捕获到任何消息。
所以想请问一下应该如何设置窗口,才能收到这样的消息。谢谢大家了
1.接收文件的方法我知道,但我想要的不是这种效果。
2.全局钩子是可以的,不过是下策,希望有更好的。
3.刚才用Spy++测试了一下,ttplayer,资源管理器的ListView、TreeView、工具栏,菜单都能够收到在其他程序按下鼠标,并且在他们上面移动的消息,但不是WM_MOUSEMOVE,很奇怪。
这是我用全局钩子的方法,希望大家能够给个更好的方法。
switch ( ((MSG *)lParam)->message )
{
case WM_MOUSEMOVE:
{
//如果左键按下
if ( ((MSG *)lParam)->wParam & MK_LBUTTON )
{
//如果鼠标在目标窗口内移动
if (WindowFromPoint(point)==DesWnd)
{
//转换坐标
::ScreenToClient(DesWnd,&point);
//传递给目标窗口,不能用PostMessage,否知会陷入消息死循环
::SendMessage(DesWnd,WM_MOUSEMOVE,((MSG *)lParam)->wParam,MAKELPARAM(point.x, point.y));
}
}
}
break;
测试代码下载:http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC%5EM%5EM/GetMessage.zip
终于找到解决方法了 http://www.codeproject.com/KB/shell/explorerdragdrop.aspx 展开
所以想请问一下应该如何设置窗口,才能收到这样的消息。谢谢大家了
1.接收文件的方法我知道,但我想要的不是这种效果。
2.全局钩子是可以的,不过是下策,希望有更好的。
3.刚才用Spy++测试了一下,ttplayer,资源管理器的ListView、TreeView、工具栏,菜单都能够收到在其他程序按下鼠标,并且在他们上面移动的消息,但不是WM_MOUSEMOVE,很奇怪。
这是我用全局钩子的方法,希望大家能够给个更好的方法。
switch ( ((MSG *)lParam)->message )
{
case WM_MOUSEMOVE:
{
//如果左键按下
if ( ((MSG *)lParam)->wParam & MK_LBUTTON )
{
//如果鼠标在目标窗口内移动
if (WindowFromPoint(point)==DesWnd)
{
//转换坐标
::ScreenToClient(DesWnd,&point);
//传递给目标窗口,不能用PostMessage,否知会陷入消息死循环
::SendMessage(DesWnd,WM_MOUSEMOVE,((MSG *)lParam)->wParam,MAKELPARAM(point.x, point.y));
}
}
}
break;
测试代码下载:http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC%5EM%5EM/GetMessage.zip
终于找到解决方法了 http://www.codeproject.com/KB/shell/explorerdragdrop.aspx 展开
6个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询