2011-12-03 29 views
0

我正在C++中创建一个Windows应用程序。我正在使用SDL(http://www.libsdl.org/) - 但是这个问题适用于用C++编写的许多其他类型的Windows应用程序,因为我以前在MFC中使用过相同的问题,并且从未解决过这个问题。Windows C++如何启动应用程序最大化?

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

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

通过调用:

ShowWindow(info1.window, SW_MAXIMIZE); 

窗口然后当如同用户的最大化按钮,点击这个被称为最大化。但问题是,当我的应用程序启动时,首先它会以特定的大小启动(例如700到500),然后当ShowWindow被调用时,它会最大化。 这是Firefox启动之间的一个很大的区别,Firefox启动并刚刚出现最大化,而不是先出现在小尺寸。

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


如果你能告诉我怎么做,在MFC或DOT NET,我也许可以找出如何做到这一点的SDL,我猜。

+0

我不认为C++可以处理windows,那么你在使用什么框架? – Qchmqs

+0

你最初如何创建你的窗口? – Mat

+0

我正在使用SDL编写C++语言的Windows应用程序,但是这个问题对于我以前编写的任何Windows应用程序来说都很常见,我从来没有解决过这个问题。我过去编程Windows MFC应用程序的方式。您可以在2001年看到我的一个应用程序http://www.codeproject.com/KB/edit/hexedit.aspx – Phil

回答

2

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

+0

但是这实际上不会是一个最大化的窗口吗?这种最大化您建议将只调整窗口的大小,以适应屏幕。这与点击最大化按钮不一样。一个真正最大化的窗口不能被标题栏拖动。你同意吗? – Phil

+0

是的,但是如果在CreateWindow中将窗口大小设置为workarea大小,然后使用SW_MAXIMIZE调用ShowWindow,那么该窗口将首先显示为最大化,然后将变为最大化。它不会首先出现在小尺寸上,这是你的问题 - 如果我正确地理解了它。 – kol

+0

啊,我明白了。所以用户不会注意到它已经达到最大化,因为它已经开始在更大的尺寸。但窗口是否正确放置在左上角? – Phil

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。

相关问题