○起動時にウィンドウを表示しない

ダイアログベースで起動時にウィンドウを表示されないようにしようとして他のサイトを調べてみると、それだけのためにタイマーを作ってShowWindow(hDlg,SW_HIDE);で表示しないようにするのばかりです。
また、タイマーを使ってShowWindow(hDlg,SW_HIDE);を実行すると一瞬画面が表示されてしまいます。

そこでタイマーを使わずに表示しなくする方法を考えました。

WM_SHOWWINDOW で SetWindowPos(hDlg,NULL,0,0,0,0,SWP_HIDEWINDOW) を呼び出して表示するときにもう一度 SetWindowPos を呼び出すだけなんですけどね。
これでタスクトレイに入れるダイアログアプリケーションがはかどります。



RECT rc;

//ダイアログプロシージャー
BOOL CALLBACK DlgProc(HWND hDlg,UINT msg,WPARAM wp,LPARAM lp){
	switch (msg){
		case WM_SHOWWINDOW:
			GetWindowRect(hDlg,&rc);
			SetWindowPos(hDlg,NULL,0,0,0,0,SWP_HIDEWINDOW);
			break;
		case WM_USER_MSG://タスクトレイのアイコンのメッセージ
			switch(lp)
			{
			case WM_LBUTTONDOWN:
//			case WM_RBUTTONDOWN:
				SetWindowPos(hDlg,NULL,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,SWP_SHOWWINDOW);
				break;
			}
			break;
でも、でも
最小化された状態でタスクバーに表示されてしまいます。
やはりタイマーも併用するしかないみたいです。
ほんとか?
誰かいい方法おしえてちょうだい?
case WM_SHOWWINDOW:
	{
		static int i;
		if(0==i){
			i=1;
			SetTimer(hDlg,1001,0,NULL);
			GetWindowRect(hDlg,&rc);
			SetWindowPos(hDlg,NULL,0,0,0,0,SWP_HIDEWINDOW);
		}
	}
	break;
case WM_TIMER:
	if(1001==wp){
		ShowWindow(hDlg,SW_HIDE);
		KillTimer(hDlg,1001);
	}
	break;


▲トップページ > Windows と C++