【问题标题】:Howto prevent a CFrameWnd from being mouse moved如何防止 CFrameWnd 被鼠标移动
【发布时间】:2012-07-30 09:26:28
【问题描述】:

我有一个显示 CFrameWnd 的应用程序,该 CFrameWnd 显示在主窗口的顶部。当用户为窗口选择某种模式时,我需要窗口不可移动且不可调整大小。
我的 CFrameWnd 是使用样式 WS_OVERLAPPEDWINDOW | WS_THICKFRAME | WS_POPUP

创建的

我遇到了一个解决方案,它使用 CWndOnNcHitTest 的重载来重写
HTLEFT,HTRIGHT,HTTOP,HTTOPLEFT,HTTOPRIGHT,HTBOTTOM,HTBOTTOMLEFT,HTBOTTOMRIGHT,HTSIZE,HTCAPTIONto HTBORDER以防止框架识别负责调整大小/移动的区域。
在我的情况下,此方法适用于调整大小,但移动窗口仍然是可能的,尽管 hittest 覆盖工作正常(通过跟踪验证)。

我的方法有什么问题吗,或者有什么东西干扰了这个解决方案,如果是这样,你有什么建议可以去哪里看吗?

【问题讨论】:

    标签: visual-c++ mfc


    【解决方案1】:

    你应该可以让 OnNcHitTest() 工作,不要返回 HTCAPTION。

    不过,移动/调整窗口大小的方法不止一种,您还必须担心系统菜单(输入 Alt+Space)。为 WM_MOVING 和 WM_SIZING 编写消息处理程序并覆盖 RECT 以使窗口保持不动。

    【讨论】:

    • 谢谢!添加 OnMoving 的覆盖并将目标 Rect 设置为当前窗口就可以了。我之前找到的 guid 没有提到 WM_MOVING 消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多