gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:57:30 25 4
gpt4 key购买 nike

我需要通过鼠标右键移动窗口。该窗口没有标题、标题栏。通过左键它可以工作

 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);
}

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

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

 CRect pos;

void CMyHud::OnRButtonDown(UINT nFlags, CPoint point)
{
pos.left = point.x;
pos.top = point.y;
::SetCapture(m_hWnd);

CDialogEx::OnRButtonDown(nFlags, point);
}


void CMyHud::OnMouseMove(UINT nFlags, CPoint point)
{
CWnd* pWnd = CWnd::FromHandle(m_hWnd);
CRect r;
if(GetCapture() == pWnd)
{
POINT pt;
GetCursorPos(&pt);
GetWindowRect(r);
pt.x -= pos.left;
pt.y -= pos.top;
MoveWindow(pt.x, pt.y, r.Width(), r.Height(),TRUE);
}

CDialogEx::OnMouseMove(nFlags, point);
}


void CMyHud::OnRButtonUp(UINT nFlags, CPoint point)
{
ReleaseCapture();

CDialogEx::OnRButtonUp(nFlags, point);
}

最佳答案

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

关于c++ - 如何使用C++通过鼠标右键移动窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30500507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com