タブにフォーカスしない

Win32のTabControlにフォーカスを設定しない方法。

標準ではタブをクッリクするとフォーカスが設定されて、フォーカスレクトの四角が表示される。

タブコントロールのウインドウスタイルTCS_FOCUSNEVERを指定すればフォーカスが設定されないと思ったのだが、うまくいかなかった。フォーカスレクトが表示されてしまう。

そこで次に考えられるのがオーナードローにする方法だが、これだと全部自分で書かなければならなくなるのでやりたくない。

そこで、フック機能をつかって実現することができた。

SetWindowsHookExでWH_CBTを指定すれば、コールバック関数がHCBT_SETFOCUSで呼ばれる。ここで1を返せば、フォーカスをさせないことができる。

よって具体的な実装方法は以下のようになる。

  1. WM_CREATEの時にSetWindowsHookExでフックを仕掛ける。
  2. コールバック関数で、タブにフォーカスが来たときはそれを無効にする。
  3. WM_DESTROYの時にUnhookWindowsHookExを呼んでフックを解除する。

コードの断片は以下

実行ファイル
プロジェクトファイル(VC6)

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)