2011-12-03 59 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。

相關問題