2011-10-01 7 views
0

私は、(タスクバーボタンが表示されるように)表示されるが、最小化されたオーバーラップウィンドウを作成したいと思います。 WS_MINIMZED(またはWS_MAXIMIZE)を使用してウィンドウを作成すると、何も行われません。 ShowWindow(hWnd、SW_SHOWMINIMIZED)を使用すると、重大なエラーが発生します。私はそれがSTARTUPINFOと関係があると思われますが、調整/変更/ハイジャックの方法に関する情報は見つかりません。最小化されたオーバーラップウィンドウの作成(Win32)

hWnd = CreateWindowA(
    (LPCSTR)atom, 
    "Window Name", 
    WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MINIMZED, // doesn't work 
    CW_USEDEFAULT, 
    CW_USEDEFAULT, 
    CW_USEDEFAULT, 
    CW_USEDEFAULT, 
    0, 
    0, 
    hInstance, 
    0); 

ShowWindow(hWnd,SW_SHOWMINIMIZED); // gives critical error 
+0

は最小化されたウィンドウを表示します。問題は他のところにある。 –

+1

"致命的なエラー"がどのように見えるかはわかりません。 SW_SHOWMINIMIZEDのWS_OVERLAPPEDとShowWindowだけが行います。 –

答えて

0

@Kaisha、あなたは正しいです:あなたはのCreateProcessを使用して実行可能ファイルを起動する場合、ウィンドウの可視性は、STARTUPINFOによって影響されます。最小化のウィンドウでアプリケーションを起動するには、次の操作を行います。

ZeroMemory(&startupInfo, sizeof(startupInfo)); 
startupInfo.cb = sizeof(startupInfo); 
startupInfo.dwFlags = STARTF_USESHOWWINDOW; 
startupInfo.wShowWindow = SW_SHOWMINNOACTIVE; 

は、私は繰り返しのWinZipのコマンドラインバージョンを起動したアプリケーションでは、このアプローチを使用し、それがうまく働きました。

0

MSDN、機能ShowWindow、パラメータnCmdShow引用:ウィンドウが表示される方法を

コントロール。このパラメータは、アプリケーションを起動したプログラムがSTARTUPINFO構造体を提供する場合、アプリケーションがShowWindowを最初に呼び出すときに無視されます。

私はあなたのウィンドウがアプリケーションによって作成された最初のウィンドウだと推測しています。したがって、ShowWindowのパラメータは無視されます。重なったウィンドウが設定WS_VISIBLEスタイルビットとXパラメータを使用して作成されている場合は

CW_USEDEFAULTに設定されています:

もうほとんど知られていない事実はCreateWindow、パラメータy(はい、yが)のためにドキュメントに見られますyパラメータは、ウィンドウの表示方法を決定します。 yパラメータがCW_USEDEFAULTの場合、ウィンドウマネージャは、ウィンドウの作成後にSW_SHOWフラグを指定してShowWindowを呼び出します。 yパラメータが他の値である場合、ウィンドウマネージャはその値をnCmdShowパラメータとしてShowWindowを呼び出します。

おそらくそれはあなたが隠されたウィンドウを作成した場合(WS_VISIBLEなし)優れている、および/またはCreateWindowyパラメータとして0を渡します。

その他のオプションは、最初にダミーウィンドウを作成して表示し、すばやく破棄するか、スプラッシュ画面のようにすることです。それはSTARTUPINFOコマンドを消費します。

+0

ダミーウィンドウを作成するよりも、メインウィンドウで 'ShowWindow'を2回呼び出す方が良いでしょう。 –

+0

@BenVoigtはい、ああ、ちらつき! – rodrigo

+0

この "機能"が 'HideWindow'と' ShowWindow'に影響を与えるかどうかは分かりませんが、おそらく 'WS_VISIBLE'のないメインフレームを作成し、それを最小化してから(2回)表示してください。 –