2

我正在用 C++ 创建一个 Windows 应用程序。我正在使用 SDL ( http://www.libsdl.org/ ) - 但是这个问题适用于许多其他类型的用 C++ 编写的 Windows 应用程序,因为几年前我在 MFC 中遇到过同样的问题并且从未解决过这个问题。

现在我希望我的应用程序以最大化的方式启动。许多其他应用程序默认以最大化状态启动,例如当我运行 firefox 时,它会自动以最大化状态启动。

现在我读到我可以使用 ShowWindow http://msdn.microsoft.com/en-us/library/ms633548

通过调用:

ShowWindow(info1.window, SW_MAXIMIZE);

窗口然后在调用时最大化,就好像用户单击了最大化按钮一样。但是,问题是当我的应用程序启动时,首先它以特定大小(例如 700 x 500)启动,然后当调用 ShowWindow 时,它会最大化。这是 Firefox 启动方式之间的一个很大区别,Firefox 启动后只是显示为最大化而不首先显示为小尺寸。

所以我的问题是,在调用 ShowWindow 之前,如何在没有这个中间窗口大小(未最大化)的情况下启动最大化?用户看到一个较小的窗口然后在启动时突然最大化是很烦人的。


如果你能告诉我如何在 MFC 或 DOT NET 中做到这一点,我想我可能会弄清楚如何在 SDL 中做到这一点。

4

2 回答 2

3

使用 SPI_GETWORKAREA 调用 SystemParametersInfo Windows API 函数以获取没有任务栏的屏幕的宽度和高度,并在调用 CreateWindow 时将窗口大小设置为这些值。(您也可以使用 SM_CXSCREEN 和 SM_CYSCREEN 调用 GetSystemMetrics 来获取屏幕的宽度和全高,但在这种情况下,窗口的底部边缘将被任务栏隐藏。)

于 2011-12-03T14:11:43.177 回答
2

也许您可以使用 SDL_VIDEO_WINDOW_POS 环境变量(请参阅http://sdl.beuc.net/sdl.wiki/SDL_envvars)将窗口定位在屏幕的左上角。使用 SystemParametersInfo 与上述帖子中的 SM_CXSCREEN 和 SM_CYSCREEN 来确定窗口的大小(用于调用 SDL_SetVideoMode)。这样窗口在屏幕上最大化。

另一种方法是自己创建窗口(使用带有窗口样式 WS_MAXIMIZE 的 CreateWindow)并通过 SDL_WINDOWID 环境变量将其传递给 SDL。

于 2012-03-14T20:51:58.980 回答