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