Nov 16, 2005

ATLコントロール内に自前で貼り付けたコントロールのフォーカシング

ポスト @ 12:36:22 | プログラミング,ATL/WTL

複合コントロールでない、普通の CWindow な ATLコントロールを作って、その中にボタンとかを自分で Create()して貼り付けたような場合、そのコントロールをダイアログボックスに貼り付けたりしたときに、Tabキーによるフォーカス移動がうまくいきません。

MSDN 読んだ限りでは、各コントロールに WS_TABSTOP を指定するのは当然としても、親ウィンドウに WS_EX_CONTROLPARENT も指定しなければならないようです。

だがしかし。
実際にそうしてみると、特定のボタンをクリックしたりすることによって、アプリ全体(正確には「メッセージキューを持つスレッド自体)がフリーズしてしまいます。

いろいろ困ったのですが、ATL7.1で作ったコントロールは、自前の CWindow の親に、COMコントロールとしての親ウィンドウ AtlAxWin71 を持っていまして、そいつにも WS_EX_CONTROLPARENT を指定することによって、ボタンまでフォーカスを下ろすことができるようになります。具体的には、WM_CREATE ハンドラの中で、ボタンとかを作るついでに
  ModifyStyleEx(0, WS_EX_CONTROLPARENT);
  GetParent().ModifyStyleEx(0, WS_EX_CONTROLPARENT);
と呼んでやればよいです。

Trackback

No Trackbacks

Track from Your Website

http://blog.izumichan.com/trackback/tb.php?id=89

Comment

No Comments

Post Your Comment


*は入力必須です。E-Mailは公開されません。