• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CPropertySheetのタブオーダーの変更)

CPropertySheetのタブオーダーの変更

このQ&Aのポイント
  • MFCを使ったダイアログアプリでCPropertySheet, CPropertyPageを使用してタブで切り替えの出来るUIを作成しようとしています。
  • CSheetをメインダイアログのOnInitDialogでCreateして,メインダイアログ内に貼り付けて使用しています。
  • タブオーダーが(メインダイアログ内のコントロール)→(CPage内のコントロール)→(タブ)という順番になっており、これを(メインダイアログ内のコントロール)→(タブ)→(CPage内のコントロール)に変更したいです。PretransMessageでTABキー押下イベントを横取りし、フォーカスの移動順を変更することはできましたが、よりスマートな方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • clsdi99
  • ベストアンサー率63% (31/49)
回答No.1

いちおう思い通りの動作ができているようですので、お困りではないようですが^^; PretranslateMessageを使うのがスマートじゃないかというところは微妙ですが、そのダイアログ内のコントロールのタブオーダーを変更してみるというのも手かもしれませんね。(SetWindowPosでZORDERを変えるとか) 例えばしょっちゅうこのような処理を必要とするなら、そーいったライブラリにしておけば便利かもしれませんね。 BEGIN_TABORDER_DEF(MyDialog, CDialog) DEF_TABORDER(IDC_XXX1) DEF_TABORDER(IDC_XXX2) DEF_TABORDER(IDC_XXX3) DEF_TABORDER(IDC_XXX4) DEF_TABORDER(IDC_XXX5) END_TABORDER_DEF() みたいな^^

kawamu
質問者

お礼

回答をしていただき有難うございます。 また,返事が遅れてしまいすみませんでした。 文字数制限の為,質問本文にはかけませんでしたが,SetWindowPosで ZORDERを変更することで,タブオーダーの順番を変えようとしたの ですが,SetWindowPosの戻り値はTRUEにもかかわらずタブオーダーの 順番は変わりませんでした. (ページ内,ダイアログ内のタブオーダーの変更はできましたが, タブのタブオーダーは変更できませんでした.) その為,PretranslateMessageを使用してTABキー押下イベントを 横取りして,無理やりフォーカスが移動するコントロールを変更する 方法をとりました. スマートな方法というか(すみません,書き方が悪かったです), MFCで用意されている関数を使用して,もう少し簡単にできない かな~と思っています.

kawamu
質問者

補足

これ以上他の回答もなさそうなので締め切ろうと思います. 結局SetWindowPos等を使用してのタブオーダーの変更は できなかったためPretranslateMessageを使用することにしました. 有難う御座いました.

関連するQ&A