0

現在の投稿は投稿の続きです ダイアログ ボックス内の編集コントロールとボタンの間でタブ キーを使用してフォーカスを切り替えることを禁止するには? これについては別の投稿が必要だと思ったからです。

その投稿のコメントに従って、編集コントロール内で Tab キーに Tab 文字を入力させました。

EditCodeから派生したクラスを作成しCEdit、メソッドをオーバーライドしました:

 afx_msg UINT OnGetDlgCode()
 {
     UINT uiCode = CEdit::OnGetDlgCode();
     uiCode |= DLGC_WANTTAB;
     return uiCode;
 }

そして、クラスのメッセージ マップにそれぞれのハンドラー エントリを追加しました。

BEGIN_MESSAGE_MAP(EditCode, CEdit)
    ON_WM_GETDLGCODE()
END_MESSAGE_MAP()

また、タイプの変数をEditCodeダイアログ クラスに追加しましたが、それでも修正できませんでした。

WindowProc次のようにオーバーライドしようとしました

LRESULT CEditCode:: WindowProc(
   UINT message,
   WPARAM wParam,
   LPARAM lParam 
)
{
    // TODO: Add your specialized code here and/or call the base class
    LRESULT lres;
    switch (message) {
    case WM_GETDLGCODE:
        lres = CEdit::WindowProc(message, wParam, lParam);
        lres |= DLGC_WANTTAB;
        return lres;
    }
    return CEdit::WindowProc(message, wParam, lParam);
}

しかし、今まで成功したことはありませんでした。

編集: TabキーにTab文字を入力させることができるようになりました。

  (DLGC_WANTCHARS | DLGC_WANTARROWS | DLGC_WANTTAB | DLGC_WANTALLKEYS). 

Shift+Tab キーの組み合わせを引き続きナビゲーションに使用したかったので、次のように書きました。

if(GetKeyState(VK_SHIFT) < 0 )
{
   return CEdit::WindowProc(message, wParam, lParam);
}

正常に動作していますが、ナビゲーションのために Shift+Tab を押して編集ボックスに戻ると、Tab キーが入力として機能しません。代わりに、コントロール間を移動します。私は混乱しています。

4

0 に答える 0