Windows7 でタスクバーを隠す
フルスクリーン描画したいのに、タスクバーが前面に出ちゃってどうしようもないときにした対応の覚書。
概要
タスクバーウィンドウを獲得して、表示を隠す指示を出す。
そのままにすると、アプリを終了しても隠れたままになってしまうので、終了時に元に戻すようにする。
問題点
この方法では、フルスクリーン状態で別のウィンドウをアクティブにしても、タスクバーは戻らない。
対応するとしたらイベントハンドラとかか。
サンプル
以下はダイアログアプリのサンプル。
/* * タスクバー獲得と非表示処理 */ HWND taskbar = ::FindWindow("Shell_TrayWnd" , NULL); // タスクバースタートボタン HWND taskbar_button = NULL; if (taskbar != NULL) { // タスクバースタートボタン獲得 from タスクバー taskbar_button = ::FindWindowEx(taskbar, NULL, "Button", NULL); if (taskbar_button == NULL) { // タスクバーからスタートボタンを獲得できない場合 // 全体から獲得 taskbar_button = ::FindWindow("Button" , NULL); } // タスクバーを隠す ::ShowWindow(taskbar, SW_HIDE); if (taskbar_button != NULL) { // タスクバーボタンを隠す ::ShowWindow(taskbar_button, SW_HIDE); } } /* // タスクバー獲得と非表示処理 */ try { MyAppDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: ダイアログが <OK> で消された時のコードを // 記述してください。 } else if (nResponse == IDCANCEL) { // TODO: ダイアログが <キャンセル> で消された時のコードを // 記述してください。 } } catch (char *e) { AfxMessageBox(e, MB_ICONWARNING); } catch (CException *e) { e->ReportError(); e->Delete(); } /* * タスクバー復帰 */ if (taskbar != 0) { // タスクバーを隠す ::ShowWindow(taskbar, SW_SHOWDEFAULT); if (taskbar_button != NULL) { // タスクバーボタンを隠す ::ShowWindow(taskbar_button, SW_SHOWDEFAULT); ::DestroyWindow(taskbar_button); // 解放 } ::DestroyWindow(taskbar); // 解放 } /* // タスクバー復帰 */