【问题标题】:Windows C++ how to startup application maximized?Windows C++如何启动应用程序最大化?
【发布时间】:2011-12-03 13:54:35
【问题描述】:

我正在用 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 中执行此操作。

【问题讨论】:

  • 我认为 C++ 根本不处理窗口,所以你使用的是什么框架???
  • 您最初是如何创建窗口的?
  • 我正在使用 SDL 用 C++ 语言编写一个 windows 应用程序,但是这个问题对于我过去编写的任何 windows 应用程序都很常见,我从未解决过这个特殊问题。我在过去对 Windows MFC 应用程序进行了编程。你可以在 2001 年看到我的一个应用程序codeproject.com/KB/edit/hexedit.aspx
  • 我更新了它以显示 SDL 的链接。
  • 注意 WinMain() 入口点声明,类库在调用 ShowWindow() 时遵循传递的 nCmdShow 参数的值。您必须修改它的 SDL 版本。 msdn.microsoft.com/en-us/library/windows/desktop/…

标签: c++ windows maximize-window


【解决方案1】:

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

【讨论】:

  • 然而这实际上不会是一个最大化的窗口吧?您建议的这种最大化只会调整窗口的大小以适应屏幕。这与单击最大化按钮不同。一个真正最大化的窗口不能被标题栏拖动。你同意吗?
  • 可以,但是如果你在CreateWindow中把窗口大小设置为工作区大小,然后用SW_MAXIMIZE调用ShowWindow,那么窗口会先最大化,然后再最大化。它不会首先以小尺寸出现,这是你的问题 - 如果我理解正确的话。
  • 啊,我明白了。所以用户不会注意到它已经最大化,因为它已经以更大的尺寸开始了。但是窗口在左上角的位置是否正确?
  • 是的,如果你将 CreateWindow 的 x 和 y 参数都设置为 0。
【解决方案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。

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多