tmytのらくがき

個人の日記レベルです

WM6.5.3でサポートされたタッチフレンドリな標準コントロールの使い方

WindowsMobile6.5.3でやっとこさタッチフレンドリな標準コントロールが提供されました。

DTKも公開されドキュメントが!とおもったけど残念ながらきませんでした。
いちおうヘッダには記載がありますが、解説がまったくなく、ひどい有様です。もちろんGoogle先生の検索結果は0件です。ひどい有様です。
高橋さんをはじめとした皆さんが書かれた『Windows Mobile 6.5 プログラミングブック』の最後の方にちょっぴり(ほんとにちょっぴり、数ページ)で6.5.3で追加されたスタイルが紹介されています。そこに紹介されている方法だとUIが今風になるだけでタッチ対応になりません。
今回ヘッダに書いてあるのをいろいろ試した結果、タッチ対応のUIに変更させることができたのでコードを交えて紹介します。
先にも紹介した『Windows Mobile 6.5 プログラミングブック』では、BS_THEMEというボタンスタイルや、CBS_EX_THEMEというコンボボックス拡張スタイルなどが紹介されています。
これらをコントロール生成時に指定してやることで、UIにシステムグローバルなテーマが適用されます。
ここまでだと、BUTTONクラスのUIのサイズは従来通りです。コンボボックスにテーマを適用した場合は、タッチフレンドリなUIになります。
ここでUIをタッチフレンドリなものにするには、BUTTONクラスの拡張スタイルにBS_EX_SIZEWITHCONTROLを指定します。
この値を指定することによって、チェックボックスなどのUIが大きく描画されるようになります。

これらを踏まえて以下のようなサンプルを作ってみました。

CreateWindowEx(0, L"BUTTON", L"従来のチェックボックス",
	WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX, 5, 0, 240, 25, hWnd, 0, 0, 0);
CreateWindowEx(0, L"BUTTON", L"テーマの適用だけ行ったチェックボックス",
	WS_VISIBLE|WS_CHILD|BS_THEME|BS_AUTOCHECKBOX, 5, 25, 240, 25, hWnd, 0, 0, 0);
CreateWindowEx(BS_EX_SIZEWITHCONTROL, L"BUTTON", L"タッチ操作に適したチェックボックス(テーマ無し)",
	WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX, 5, 50, 240, 25, hWnd, 0, 0, 0);
CreateWindowEx(BS_EX_SIZEWITHCONTROL, L"BUTTON", L"タッチ操作に適したチェックボックス(テーマ有り)",
	WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX|BS_THEME, 5, 75, 240, 25, hWnd, 0, 0, 0);

CreateWindowEx(0, L"BUTTON", L"従来のラジオボタン",
	WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON, 5, 125, 240, 25, hWnd, 0, 0, 0);
CreateWindowEx(0, L"BUTTON", L"テーマの適用だけ行ったラジオボタン",
	WS_VISIBLE|WS_CHILD|BS_THEME|BS_AUTORADIOBUTTON, 5, 150, 240, 25, hWnd, 0, 0, 0);
CreateWindowEx(BS_EX_SIZEWITHCONTROL, L"BUTTON", L"タッチ操作に適したラジオボタン(テーマ無し)",
	WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON, 5, 175, 240, 25, hWnd, 0, 0, 0);
CreateWindowEx(BS_EX_SIZEWITHCONTROL, L"BUTTON", L"タッチ操作に適したラジオボタン(テーマ有り)",
	WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON|BS_THEME, 5, 200, 240, 25, hWnd, 0, 0, 0);

コントロール生成部分以外は省略しています。WM6.5.3 Pro用のウィンドウアプリケーションプロジェクトを作成した時のテンプレートに、WM_CREATEメッセージ処理時にこのコードを実行しているだけの簡単なものです。
これを実行すると以下のようになります。

このように、拡張スタイルを一つ追加するとOSが標準で使用しているスタイルと同じものを作成することができます。
WM6.5.3向けアプリケーションを開発している方はぜひ試してみてください。

僕はC++でしかわからないので、.NET CFでどうやるかはid:iseebiあたりに丸投げしておきます。