在没有标题栏的 mfc c++ 中移动 Window?
Move Window in mfc c++ without titlebar?
我正在使用此代码移动 window。但是这段代码效果不佳。当我点击 windows 上的任意位置时,它会移动,但我只想移动 windows 表单。当我点击特定的想法时。比如图片。我正在使用 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
仍然被调用。您可以将其限制为 Window 内的任何矩形,例如 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);
}
如果你想在 window 中移动一个元素,你可以使用 javascript:
Ps,通常你应该使用 WM_NCHITTEST,如前所述。这种情况非常不寻常,因为它是 HTML 对话框。您应该重新考虑放置一个用户可以理解的普通标题栏,或者您可以将 html 控件放在对话框中,然后您可以使用标准 WinApi 控制对话框的其余部分。
我正在使用此代码移动 window。但是这段代码效果不佳。当我点击 windows 上的任意位置时,它会移动,但我只想移动 windows 表单。当我点击特定的想法时。比如图片。我正在使用 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
仍然被调用。您可以将其限制为 Window 内的任何矩形,例如 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);
}
如果你想在 window 中移动一个元素,你可以使用 javascript:
Ps,通常你应该使用 WM_NCHITTEST,如前所述。这种情况非常不寻常,因为它是 HTML 对话框。您应该重新考虑放置一个用户可以理解的普通标题栏,或者您可以将 html 控件放在对话框中,然后您可以使用标准 WinApi 控制对话框的其余部分。