2007-10-04

非表示のウィンドウからダイアログを表示させる

電波状態監視のアプリをウィンドウを非表示で作成しようとしています。
 
ウィンドウは ShowWindowに SW_HIDEを指定して非表示にしました。
こうすることでタスクの一覧からも消えてくれます。
//ShowWindow(g_hWnd, nCmdShow);
ShowWindow(g_hWnd, SW_HIDE);
UpdateWindow(g_hWnd);
 
ところが、この状態からダイアログを表示できずにしばらく悩んでしまいました。
case WM_TRAY_NOTIFYICON:
    if (WM_LBUTTONDOWN == lParam) {
        DialogBox(g_hInst, (LPCTSTR)IDD_CONFIG_DIALOG, g_hWnd, ConfigDialogProc);
    }
    break;
 
DialogBoxは正常に終るのですが、画面には何も表示されません。
 
その後 色々と試行錯誤した結果、単に親ウィンドウが非表示だから表示できてなかっただけという事に気付きました。
 
ダイアログを表示する直前にウィンドウを表示(ついでに最前面に移動)することで無事にダイアログを表示させることができました。
case WM_TRAY_NOTIFYICON:
    if (WM_LBUTTONDOWN == lParam) {
        ShowWindow(g_hWnd, SW_NORMAL);
        SetForegroundWindow((HWND)((ULONG) g_hWnd | 0x00000001));
        DialogBox(g_hInst, (LPCTSTR)IDD_CONFIG_DIALOG, g_hWnd, ConfigDialogProc);
        ShowWindow(g_hWnd, SW_HIDE);
    }
    break;
 
わかってしまえば何という事も無いのですが、随分時間を取られてしまいました。
という訳で今日はこの辺で...。
 

0 件のコメント: