20 April 2008

(Windows Mobile) タスクバーの閉じるボタン無効化

Windows Mobile (Windows CE) で、タスクバーの閉じるボタンを無効化する方法。

20080420-normalwnd.png

組み込み用 eMbedded Visual C++で、CDialogの仮想関数 WindowProc をオーバーライドする。

C++/MFC タスクバーの閉じるボタンを消す
LRESULT CSystemMenuDisableTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください // 閉じるボタン(画面右上の"×")を押したとき if(message == WM_COMMAND && wParam == 0x10000001) return 0; return CDialog::WindowProc(message, wParam, lParam); }

なお、wParam=0x10000001 というのは、メッセージポンプでWindowProcが呼び出されたときに、パラメーターを記録して、その中から「怪しそうな」ものを一つずつ試した結果…

msg=200, wParam=0, lParam=600DA msg=20, wParam=1AC210, lParam=2000001 msg=87, wParam=0, lParam=1C014C40 msg=200, wParam=0, lParam=500DB msg=20, wParam=1AC210, lParam=2000001 msg=87, wParam=0, lParam=1C014C40 msg=200, wParam=0, lParam=400DB msg=20, wParam=1AC210, lParam=2000001 msg=87, wParam=0, lParam=1C014C40 msg=200, wParam=0, lParam=200DC msg=20, wParam=1AC210, lParam=2000001 msg=87, wParam=0, lParam=1C014C40 msg=200, wParam=0, lParam=100DC msg=1F, wParam=0, lParam=0 msg=111, wParam=10000001, lParam=0 msg=47, wParam=0, lParam=1C02F58C msg=86, wParam=0, lParam=0 msg=6, wParam=0, lParam=0 msg=36E, wParam=0, lParam=1C02F0D4 msg=47, wParam=0, lParam=1C02F59C msg=2, wParam=0, lParam=0 msg=7FFF, wParam=0, lParam=0