创建最小化重叠窗口(Win32)
Creating a minimized overlapped window (Win32)
我想创建一个重叠的窗口,开始可见(所以任务栏按钮显示),但最小化。用WS_MINIMZED(或WS_MAXIMIZE)创建窗口没有任何作用。使用ShowWindow(hWnd, sw_showminimize)会产生严重错误。我怀疑它与STARTUPINFO有关,但我找不到关于如何调整/更改/劫持它的任何信息。
hWnd = CreateWindowA(
(LPCSTR)atom,
"Window Name",
WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MINIMZED, // doesn't work
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,
0,
hInstance,
0);
ShowWindow(hWnd,SW_SHOWMINIMIZED); // gives critical error
@Kaisha,你是对的:如果你使用CreateProcess启动可执行文件,那么窗口的可见性将受到STARTUPINFO的影响。要以最小化窗口的方式启动应用程序,请执行以下操作:
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_SHOWMINNOACTIVE;
我在一个反复启动WinZip命令行版本的应用程序中使用了这种方法,它工作得很好。
引用MSDN,函数ShowWindow
,参数nCmdShow
:
控制窗口的显示方式。如果启动该应用程序的程序提供了一个STARTUPINFO结构,则该参数在应用程序第一次调用ShowWindow时被忽略。
所以我猜你的窗口是由应用程序创建的第一个窗口,因此,ShowWindow
的参数被忽略。
在CreateWindow
的文档中可以看到另一个鲜为人知的事实,参数y
(是的,y
):
如果使用WS_VISIBLE样式位设置创建了一个重叠窗口,并且x参数设置为CW_USEDEFAULT,则y参数决定窗口的显示方式。如果y参数是CW_USEDEFAULT,那么窗口管理器在创建窗口之后调用带有SW_SHOW标志的ShowWindow。如果y参数是其他值,那么窗口管理器将使用该值作为nCmdShow参数调用ShowWindow。
如果您创建隐藏窗口(没有WS_VISIBLE
)和/或将0作为CreateWindow
的y
参数,可能会更好。
其他选择是先创建一个虚拟窗口,显示它,然后快速销毁它,有些像一个闪屏。这将消耗STARTUPINFO命令。
- 我如何将Win32窗口渲染到OpenGL纹理
- 如何在 Win32 窗口中实现 MFC 资源
- 查看Win32窗口中的所有内容
- 是否可以在不重新打开重新打开 win32 窗口的情况下执行需要提升的任务
- Win32 窗口通过顶部窗口重绘
- Win32窗口未显示
- 如何在win32窗口中创建嵌入式文本输入框
- 我用c编写了一些代码来制作简单的win32窗口,但失败了
- Win32 窗口包装器出错(参数不正确)
- C++ Win32 窗口背景不重绘
- Win32窗口创建失败
- C++Win32窗口重叠事件
- 创建没有WinMain函数的Win32窗口
- 修改win32窗口拖动/移动行为
- Qt和win32,如何使win32窗口全屏禁用所有按键
- WPF控件中的本机Win32窗口
- 记住创建空白win32窗口的所有内容很重要吗?
- 如何使用SDL c++在win32窗口中设置GUI按钮
- Win32窗口样式重叠问题
- Win32窗口冻结后,第一次绘制(directx 11)