Windows Mobileプログラミング #06 ダイアログ・メニュー
やはりというか、WindowsMobileの特有の作法にて苦戦中。
いろいろWebにて検索しつつ、頑張ってます。
まぁ、いくつかはまった部分があるので、覚え書…
●ダイアログ系 - 他アプリとのウインドウの切り替え
WindowsMobileでは他アプリ・today表示を行った場合、自アプリは後ろに隠れなければならない。
VisualStudio2005にてダイアログベースのアプリを作成した場合、デフォルトではtoday表示を行っても、後ろに隠れない。
解決方法としては、ダイアログのスタイルを[ポップアップ]から[オーバーラップ]に変更することで、Today表示時に後ろに隠れることができます。
理由はうまく説明できません。疑問に思った方は、ポップアップ・オーバーラップで検索かけてみてください。
●ダイアログ系 - OKボタンと×ボタン
WindowsMobileの作法にて、アプリは自分で終了しないというのがあります。要は右上のボタンを押下しても、ウインドウが最小化されるだけで終了しない。アプリの終了はOSがアプリの起動数・メモリの残量を考慮しして決める、ということです。
で、右上のボタンですが、2種類あり、OKボタンはアプリ終了、×ボタンは最小化となっているようで、ダイアログベースでアプリを作成した場合、右上のボタンはOKボタンとなるようです。SDIアプリを作成してみたところ、×ボタンとなりアプリは最小化されました。
※1 解決方法はまだ見つけられませんでした。SDIにダイアログを張り付けるのが手っ取り早いのかもしれません。
※2 どうも、MicrosoftはWindowsMobileのアプリはSDIを基準としているようです。ダイアログはアプリ上のサブ画面などを想定していて、ポップアップ画面として表示、でOKボタンで閉じる、を想定しているような。やはり、素直にSDIにしたほうがいいのか…
※3 ちなみに、WkTaskなどのタスク管理アプリは、ダイアログを閉じる際にOKボタンを押下したさいに発生するメッセージを終了させたいアプリに投げています。ですので、ダイアログアプリがOKボタンで終了しないようにOKボタンのハンドラをいじると閉じなくなってしまいます。
●メニュー系
なかなか、チェック状態にすることができなかったので、サンプルソースを。
結局、メニューのハンドルを取得する方法がよくわからなく、GetSubMenu等を使用しても右メニューが取得できなかったよう(チェック状態にすることができなかった)
| 01: HWND hMenu = SHFindMenuBar( m_hWnd); 02: TBBUTTONINFO tbbi = {0}; 03: tbbi.cbSize = sizeof(tbbi); 04: tbbi.dwMask = TBIF_LPARAM | TBIF_BYINDEX; 05: ::SendMessage( hMenu, TB_GETBUTTONINFO, 06: [0:左メニュー/1:右メニュー], (LPARAM)&tbbi); 07: HMENU hMenu2 = (HMENU)tbbi.lParam; 08: CheckMenuItem( (HMENU)hMenu2, [ID番号], 09: [MF_BYCOMMAND|MF_CHECKED / MF_BYCOMMAND|MF_UNCHECKED]); |
6行目でメニューを指定してハンドルを取得、8〜9行目にてチェックをON/OFFする。
ちなみに、リソースエディタにてプロパティCheckedをTRUEにする必要はない。
2008.03.30 | Comments(0) | Trackback(0) | Mobile プログラミング

