【问题标题】:Creating window frame without maximize button and without resizing options?创建没有最大化按钮且没有调整大小选项的窗口框架?
【发布时间】:2015-02-08 17:22:03
【问题描述】:

我需要创建一个类似于“普通”窗口的窗口,但没有最大化按钮和调整边框大小。

上网一搜,研究了MSDN,我才知道,原生实现两者是不可能的。

没有一种窗口样式可以两者兼得(我可以禁用最大化按钮,但这不是我的目标;至于删除调整大小选项,我在文档中找到了合适的窗口样式)。

最接近的描述是对话框框架行为(没有调整边框),但带有额外的最小化按钮。

问题:

有没有其他方法可以实现我的目标?

如果可以,能否提供教程或代码示例的链接?这将是我第一次做这样的事情并且可以使用我能得到的所有帮助?

重要提示:我在搜索解决方案时找到了this example,但这对我没有帮助,因为我的目标是 Windows XP 以后。

【问题讨论】:

    标签: c++ c winapi window frame


    【解决方案1】:

    创建一个如下所示的窗口将为您提供一个带有标题栏、最小化按钮和退出按钮的非大小窗口。

    dwStyle = WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX;
    hWnd = CreateWindow(szAppName, szTitle, dwStyle,
        CW_USEDEFAULT, 0,  CW_USEDEFAULT, 0,
        NULL, NULL, hInstance, NULL);
    

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600%28v=vs.85%29.aspx

    【讨论】:

    • 我仍然需要关闭按钮旁边的最小化按钮:(
    • @AlwaysLearningNewStuff 我编辑了答案以包含一个最小化按钮。
    • 我认为我在帖子中很清楚,我不想禁用最大化按钮,而是完全删除它 -> 这是困难的部分。
    • 查看@JaromírAdamec 答案的最后一段。
    【解决方案2】:

    我想您正在使用CreateWindowEx 创建窗口。然后,如果您同时省略 WS_MAXIMIZEBOXWS_MINIMIZEBOX 标志(dwStyle 参数),则窗口将只有关闭按钮(没有最小化/最大化)按钮。如果您只省略WS_MAXIMIZEBOX,Windows 将禁用最大化框以保持所有窗口的图形布局一致。没有办法改变这种行为,它可以在不同版本的 Windows 中改变(例如,Win3.1 在设置标志时根本没有绘制最大化按钮。)

    通过设置除WS_THICKFRAME 以外的其他框架(即dwExStyle 参数中的WS_BORDERWS_EX_DLGMODALFRAME)禁用可调整大小的边框。

    您还可以通过拦截消息WM_WINDOWPOSCHANGINGWM_WINDOWPOSCHANGEDWM_ENTERSIZEMOVEWM_EXITSIZEMOVEWM_SIZINGWM_MOVING 来控制用户窗口的大小/移动。

    理论上,你也可以完全改变窗口非客户区的外观,但这并不值得,而且在使用操作系统的默认图形布局时是否是一个好主意值得怀疑。所有的开发人员和用户都习惯了它并满足于它。 (换句话说:如果您不想最大化您的窗口,只需省略 WS_MAXIMIZEBOX 标志并将其留在操作系统上如何实现此特定决定。)

    【讨论】:

      【解决方案3】:

      我很确定 MSDN 上记录了您要省略的窗口样式是 WS_THICKFRAME,因为窗口样式页面说粗框是调整大小的框。

      【讨论】:

      • 是的,我找到了那个。但是,这种样式不会删除最大化按钮...
      • 您需要确保既不包括WS_THICKFRAME 也不包括WS_MAXIMIZEBOX。你用的是什么窗口样式?
      • 目前我使用以下内容:WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN 禁用调整大小。现在问题出在最大化框中,如果我删除 WS_MAXIMIZEBOX 最大化按钮被禁用。我可以毫无问题地接受在框架中创建自己的按钮并程序最小化/恢复我自己的窗口的解决方案(这将是我的第一次,但我想必须一直学习......)。我只是想确保我会涵盖所有情况,例如按下按钮、ALT+TAB、单击系统菜单等...
      猜你喜欢
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2022-01-10
      • 2012-02-29
      • 1970-01-01
      • 2014-10-04
      • 2012-11-22
      • 2022-11-11
      相关资源
      最近更新 更多