如何使用C ++通过鼠标右键移动窗口?

时间:2015-05-28 07:58:08

标签: c++ mfc

我需要用鼠标右键移动窗口。窗口没有标题,标题栏。通过左键可以正常工作

<iframe id="frameBuyRecharge" width="100%" frameborder="0" src="some link"></iframe>

但是,如果我将此代码放在OnRButtonDown上,它就会起作用。有什么问题?

嗯,找到解决方案,感谢Mark Ransom:

 void CMyHud::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    SendMessage(WM_SYSCOMMAND, SC_MOVE|0x0002);
    CDialogEx::OnLButtonDown(nFlags, point);
}

3 个答案:

答案 0 :(得分:3)

OnRButtonDown功能中,执行SetCapture以确保鼠标按钮关闭时所有鼠标消息都会路由到您的窗口。还将鼠标位置存储在成员变量中。现在,在OnMouseMove函数中,检查GetCapture是否返回与您的HWND相同的对象 - 如果是,则计算当前鼠标位置与保存的对象之间的差异,然后调用{ {3}}移动窗口。

答案 1 :(得分:1)

关于鼠标左键:

SC_MOVE|0x0002标注为0xF012SC_DRAGMOVE。这显然是一个无证的常数。可能有一个很好的理由微软不希望任何人使用它,这就是他们隐藏它的原因。

此外,WM_SYSCOMMAND是一条通知消息。你应该回复它,而不是发送它。要用鼠标左键单击拖动窗口:

message map ...
ON_WM_NCHITTEST()

LRESULT CMyDialog::OnNcHitTest(CPoint p)
{
    //responding to a notification message
    return HTCAPTION; 
}

要使用鼠标右键拖动窗口,您必须覆盖OnRButtonDown,OnMouseMove,OnRButtonUp并创建自己的例程。但是Window的行为变得非常混乱。这真的值得吗?

答案 2 :(得分:0)

您可以使用鼠标消息来实现。 WM_RBUTTONDOWN,WM_MOUSEMOVE