gpt4 book ai didi

html - 在没有标题栏的情况下在 mfc C++ 中移动窗口?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:02 29 4
gpt4 key购买 nike

我正在使用这段代码来移动窗口。但是这段代码效果不佳。当我单击窗口上的任意位置时,它会移动,但我只想移动窗口窗体。当我点击特定的想法时。比如图片。我正在使用 MFC C++ HtmlDialog。有人知道怎么做吗?

DHTML_EVENT_ONCLICK(_T("image"), PreTranslateMessage)

BOOL CHtmlDlgTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_MOUSEMOVE && (pMsg->wParam & MK_LBUTTON))
{
CPoint p;
GetCursorPos(&p);
CRect r;
GetWindowRect(&r);
if (r.PtInRect(p))
{
ReleaseCapture();
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
SendMessage(WM_NCLBUTTONUP, HTCAPTION, 0);
return 1;
}
}

return CDialog::PreTranslateMessage(pMsg);
}

最佳答案

WM_NCLBUTTONDOWN是一个通知消息,Windows发送这个消息,程序响应它。该程序不应将此消息发送到 Windows。在这种情况下它可以工作,但不推荐这样做。

我不知道这段代码是如何工作的:DHTML_EVENT_ONCLICK(_T("image"), PreTranslateMessage) 它可能会被忽略,您可以将其删除。 PreTranslateMessage 仍然被调用。您可以将其限制为窗口内的任何矩形,例如 CRect(50,50,200,200):

BOOL CHtmlDlgTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_MOUSEMOVE && (pMsg->wParam & MK_LBUTTON))
{
CPoint p = pMsg->pt;
ScreenToClient(&p);
CRect r(50,50,200,200);
if (r.PtInRect(p))
{
ReleaseCapture();
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
SendMessage(WM_NCLBUTTONUP, HTCAPTION, 0);
return 1;
}
}
return CDialog::PreTranslateMessage(pMsg);
}

如果你想在窗口中移动一个元素,你可以使用 javascript:

Moveable/draggable <div>

请注意,通常您应该使用 WM_NCHITTEST,如前所述。这种情况非常不寻常,因为它是 HTML 对话框。您应该重新考虑放置一个用户可以理解的普通标题栏,或者您可以将 html 控件放在对话框中,然后您可以使用标准 WinApi 控制对话框的其余部分。

关于html - 在没有标题栏的情况下在 mfc C++ 中移动窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657555/

29 4 0