2011-12-03 7 views
0

私はC++でWindowsアプリケーションを作成しています。私はSDL(http://www.libsdl.org/)を使用しています - しかし、この問題は、前にMFCで同じ問題を抱えていたこの問題を決して解決しなかったので、C++で書かれた他の多くのタイプのWindowsアプリケーションに当てはまります。Windows C++のアプリケーションを起動する方法を最大化するには?

今、アプリケーションを最大限に起動したいと思っています。他の多くのアプリケーションは、デフォルトでは最大化状態で起動します。たとえばfirefoxを実行すると、自動的に最大化されます。

は、今私は、私が使用できることを読んでのShowWindowを呼び出すことによって http://msdn.microsoft.com/en-us/library/ms633548

ShowWindow(info1.window, SW_MAXIMIZE); 

ユーザーが最大化ボタンをクリックしたかのように、これが呼び出されたときに最大化ウィンドウ。しかし、問題は、私のアプリケーションが起動すると、最初に特定のサイズ(たとえば500だけで500)で起動し、次にShowWindowが呼び出されると最大化されます。 これは、Firefoxの起動方法とFirefoxの起動方法の大きな違いです。最初に小さいサイズで表示されずに最大化されて表示されます。

私の質問は、ShowWindowが呼び出される前にこの中間ウィンドウサイズ(最大化されていない)なしで最大化を開始する方法です。起動時に突然最大化する小さなウィンドウをユーザーが見るのは面倒です。


あなたはどのようにMFCまたはDOT NETでそれを行うために私を伝えることができる場合、私はおそらくSDLでそれを行う方法を考え出すことができ、私は推測します。

+0

私はC++がウィンドウをまったく処理しないと思うので、どのフレームワークを使用していますか? – Qchmqs

+0

ウィンドウを最初にどのように作成しますか? – Mat

+0

私はSDLを使用してC++言語でWindowsアプリケーションを作成していますが、この問題は過去に書いたすべてのWindowsアプリケーションでよく発生します。 Windows MFCアプリケーションを過去の方法でプログラミングしました。 2001年に私のアプリケーションの1つを見ることができます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でワークエリアのサイズにウィンドウサイズを設定し、SW_MAXIMIZEでShowWindowを呼び出すと、ウィンドウは最大化された状態で最初に表示され、最大化されます。最初は小さなサイズでは表示されませんが、それはあなたの問題でした。 – kol

+0

ああそうです。ユーザーはすでに大きなサイズで開始しているため、最大化されたことに気付かないでしょう。しかし、ウィンドウは左上に正しく配置されていますか? – Phil

2

多分SDL_VIDEO_WINDOW_POS環境変数(http://sdl.beuc.net/sdl.wiki/SDL_envvarsを参照)を使用して、ウィンドウを画面の左上隅に配置します。上記の投稿のSM_CXSCREENおよびSM_CYSCREENとともにSystemParametersInfoを使用して、(SDL_SetVideoModeを呼び出すための)ウィンドウのサイズを決定します。このようにして、ウィンドウは画面全体で最大化されます。

代わりに、(ウィンドウスタイルWS_MAXIMIZEのCreateWindowを使用して)ウィンドウを自分で作成し、それをSDL_WINDOWID環境変数を介してSDLに渡すこともできます。