在没有标题栏的 mfc c++ 中移动窗口?

Posted

技术标签:

【中文标题】在没有标题栏的 mfc c++ 中移动窗口?【英文标题】:Move Window in mfc c++ without titlebar? 【发布时间】:2015-08-19 20:58:58 【问题描述】:

我正在使用此代码来移动窗口。但是这段代码不能很好地工作。当我单击窗口上的任意位置时,它会移动,但我只想移动窗口窗体。当我点击具体认为。例如图片。我正在使用 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);    

【问题讨论】:

真的有必要在 PreTranslateMessage 中处理移动窗口吗?我想你可以在 OnLButtonDown 和 OnMuseMove 上做到这一点...... 所以请帮我这样做? 【参考方案1】:

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>

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

【讨论】:

先生,我该如何执行此任务。当我点击确定按钮时。意思是当我按下确定按钮时,我可以移动窗口。居然没有按就按下去? @MuhammadRaza:恕我直言,这不是要走的路。使用 IInspectable 的解决方案。 @MichaelWalz 在这种情况下 OnNcHitTest 不起作用,因为它是一个 html 对话框。在尝试通过单击 html 窗口中的 OK 按钮来移动 html 窗口时,SO 的要求也是不合理的。 巴尔马克·谢米拉尼先生。当我按下 OK 按钮时,我只是想要什么。我可以在屏幕的任何位置移动整个窗口。如果我点击任何其他地方,窗户就不会移动。你是正确的 OnNcHitTest 不适用于 Mfc html 对话框。 @BarmakShemirani 正确。我不知道。谢谢。

以上是关于在没有标题栏的 mfc c++ 中移动窗口?的主要内容,如果未能解决你的问题,请参考以下文章

MFC 单击并移动/拖动对话框窗口

Qt 4:移动没有标题栏的窗口

MFC中无边框窗口的拖动 怎么添加WM_NCLBUTTONDOWN消息映射

如何弹出一个窗口气泡(使用定时器向上移动)

移动/调整窗口大小时闪烁

MFC中嵌套QT窗口,如果让qt窗口跟随MFC的窗口移动