创建没有最大化按钮的窗口框架而不调整选项大小?

时间:2014-12-10 13:30:34

标签: c++ c winapi window frame

我需要创建一个像" normal"一个,但没有最大化按钮,并调整边框大小。

通过互联网搜索,研究MSDN,我了解到原生两种方法都是不可能实现的。

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

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

问题:

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

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

一个重要的注意事项:我在搜索解决方案时找到了this example,但它对我没有帮助,因为我的目标是Windows XP。

3 个答案:

答案 0 :(得分:5)

如下所示创建一个窗口将为您提供一个不大的窗口,其中包含标题栏,最小化按钮和退出按钮。

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

答案 1 :(得分:3)

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

通过设置WS_THICKFRAME之外的其他帧(即WS_BORDER参数中的WS_EX_DLGMODALFRAMEdwExStyle)来禁用可调整大小的边框。

您还可以通过拦截邮件WM_WINDOWPOSCHANGINGWM_WINDOWPOSCHANGEDWM_ENTERSIZEMOVEWM_EXITSIZEMOVEWM_SIZING和{{}来控制用户调整/移动窗口的大小1}}。

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

答案 2 :(得分:0)

我很确定在MSDN上记录了你想要OMIT的窗口样式是WS_THICKFRAME,因为窗口样式页面说厚框是一个大小调整框架。