创建没有最大化按钮的窗口框架而不调整选项大小?
我需要创建一个像“普通”窗口一样的窗口,但没有最大化按钮和大小边框。
通过互联网搜索,并研究MSDN,我已经了解到,原生两种方法都是不可能实现的。
没有窗口样式可以同时执行这两种操作(我可以禁用最大化按钮,但这不是我的目标;至于删除resize选项,我在文档中找到了合适的窗口样式)。
最接近的描述是对话框框架行为(没有大小调整边框),但有额外的最小化按钮。
题:
有没有办法以其他方式实现我的目标?
如果是,您能否提供教程或代码示例的链接? 这将是我第一次做这样的事情,可以使用我能得到的所有帮助吗?
一个重要的注意事项:我在搜索解决方案时找到了这个例子 ,但它对我没有帮助,因为我的目标是Windows XP。
创建如下窗口将为您提供一个不大的窗口,其中包含标题栏,最小化按钮和退出按钮。
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
我想你是用CreateWindowEx
创建窗口的。 然后,如果省略WS_MAXIMIZEBOX
和WS_MINIMIZEBOX
标志( dwStyle
参数),则窗口将只有关闭按钮(没有最小化/最大化)按钮。 如果仅WS_MAXIMIZEBOX
,则Windows会禁用最大化框以使所有窗口的图形布局保持一致。 没有办法改变这种行为,它可以在不同版本的Windows中进行更改(例如,Win3.1,如上所述设置标志时根本没有绘制最大化按钮。)
通过设置除WS_THICKFRAME
之外的其他帧(即dwExStyle
参数中的WS_BORDER
或WS_EX_DLGMODALFRAME
)来禁用可resize的边框。
您还可以通过拦截WM_WINDOWPOSCHANGING
, WM_WINDOWPOSCHANGED
, WM_ENTERSIZEMOVE
, WM_EXITSIZEMOVE
, WM_SIZING
和WM_MOVING
消息来控制用户调整/移动窗口的WM_MOVING
。
从理论上讲,你也可以完全改变窗口的非客户区域的外观,但是它几乎不值得努力,并且当所有的开发人员与操作系统的默认图形布局作斗争是否是一个好主意是值得怀疑的。和用户习惯它和内容。 (换句话说:如果您不希望窗口最大化,只需省略WS_MAXIMIZEBOX
标志并将其留在操作系统上,以便如何实现此特定决策。)
我很确定在MSDN上记录了你想要OMIT的窗口样式是WS_THICKFRAME
,因为Window Styles页面说明一个粗框架是一个大小调整框架。