Mfc WM_LBUTTONDOWN和#x2B;WM_LBUTTONUP组合制作拖动视图

Mfc WM_LBUTTONDOWN和#x2B;WM_LBUTTONUP组合制作拖动视图,mfc,mouse,sendmessage,Mfc,Mouse,Sendmessage,我在我的应用程序视图中对特定事件使用以下代码来模拟鼠标左键单击 SendMessage(WM_LBUTTONDOWN); SendMessage(WM_LBUTTONUP); 执行此代码后,将显示鼠标拖动视图。如何在模拟鼠标单击后避免此拖动视图 当我通过SPY++监控时,我得到两条消息如下所示: WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:752 YPO:85 WM_按钮fwKeys:0000 xPos:752 yPos 85 我怀疑WM_LBUTTONUP消

我在我的应用程序视图中对特定事件使用以下代码来模拟鼠标左键单击

SendMessage(WM_LBUTTONDOWN); 
SendMessage(WM_LBUTTONUP);
执行此代码后,将显示鼠标拖动视图。如何在模拟鼠标单击后避免此拖动视图

当我通过SPY++监控时,我得到两条消息如下所示:

WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:752 YPO:85

WM_按钮fwKeys:0000 xPos:752 yPos 85

我怀疑WM_LBUTTONUP消息没有正确发送。 fwKeys:0000表示什么?
以上代码中WM按钮的sendMessage中是否有错误的想法?

首先,如果这是您的真实代码,那么您是在“模拟”鼠标不正确地点击。
WM_LBUTTONDOWN
WM_LBUTTONUP
比消息本身更重要:消息的
wParam
lParam
值中包含数据

如果您花一秒钟的时间查看和的MSDN页面,您可以很容易地看到这一点。它们准确地描述了
wParam
lParam
值在此上下文中的含义。顺便说一句,这将回答您关于Spy++中“fwKeys”含义的问题

但实际上,如果您需要模拟鼠标事件,请使用正确的方法:调用函数。生命的全部目的就是合成老鼠的事件

关于您的另一个问题:如何禁用拖动视图:这取决于您处理的控件类型。例如,如果您有树状视图控件,则可以在控件上设置
TVS\u DISABLEDRAGDROP
样式,如中所述。如果要永久禁用该控件的拖放,请在创建该控件时设置该标志。如果您只想在合成输入操作期间暂时禁用它,那么这就有点棘手了-您可以使用临时删除
TVS\u DISABLEDRAGDROP
,但您还需要添加代码,以便在完成发送合成鼠标移动且控件完成处理后再次启用它


说了这么多,你到底想实现什么?可能有更简单的方法来解决您试图解决的问题。

谢谢您的回答和支持

我正在开发一个需要此解决方案的应用程序。最后,我发现WM_LBUTTONDOWN处理程序已经在我的视图中定义。这需要时间来执行。因为我使用SendMessage将消息发布到线程的消息队列并立即返回,在WM_LBUTTONDOWN完成之前,调用下一条消息WM_LBUTTONUP。所以WM_LBUTTONUP失败了

我使用的PostMessage如下所示

PostMessage(WM_LBUTTONDOWN); 
PostMessage(WM_LBUTTONUP);

这解决了我的问题

查看WM_LBUTTONUP和WM_LBUTTONDOWN的文档。BTW SendMessage((WM_LBUTTONDOWN)不正确,缺少参数()@MichaelWalz如果他使用的是WPARAM和LPARAM参数的默认值的
CWnd::SendMessage
,那么参数可能不会丢失。感谢您的详细建议。我在这里尝试实现的是-我在视图中模拟此单击。视图中的此单击解决了我的原始问题。原始问题m是我的菜单项,在特定操作后无法访问。因此,在视图中单击可访问菜单。因此,我正在模拟clik,以便可以访问菜单。@Rajesh然后使用
鼠标事件
,并将正确的参数传递给该函数。MSDN页面应该会有所帮助。