掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Tabキーによるフォーカスの移動ができない (ID:62303)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
CFormViewの持つダイアログ(以下:ViewDlg)にリソース側で任意にコントロールを配置しています。 ViewDlg上にPropertySheetを配置し、さらにPropertyPageを配置しています。 見た目としてはWindowsのコントロールパネル→画面のプロパティのような形で、 OK・キャンセル・適用ボタンをプロパティシートではなくViewDlg上で配置しているといった感じです。 デフォルトの状態ではTabキーを押すとプロパティページ内のコントロールとページのタブにフォーカスが移動します。 画面プロパティでTabを押した時のOK・キャンセル・適用ボタンを飛ばしてフォーカスが移動している感じです。 それを画面プロパティのようにTabでViewDlg含む全てのコントロールに移動できるようにしたいのですが上手くいきません。 現状ではViewDlg上のコントロールにフォーカスがある状態からアクティブなプロパティページのコントロールにフォーカスを移動させることには成功しました。 下記はCFormViewに記述したものです。 m_pSheet はプロパティシートのポインタ、m_pPage1・m_pPage2はそれぞれプロパティページのポインタです。 BOOL CTestView::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { switch (pMsg->wParam) { case VK_TAB: // Ctrl+Tabは基底処理でページ移動をさせる if (GetKeyState(VK_CONTROL) & 0x80) { break; } // 印刷ボタンから各ページの最後尾のコントロールに移動 if (GetKeyState(VK_SHIFT) & 0x80) { if (m_pSheet->GetFocus() == GetDlgItem(IDC_PRINT)) { m_pSheet->GetActivePage()->SetFocus(); if (m_pSheet->GetActivePage() == theApp.m_pKubun) { m_pPage1->GetDlgItem(IDC_CTRL5)->SetFocus(); } if (m_pSheet->GetActivePage() == theApp.m_pTanni) { m_pPage2->GetDlgItem(IDC_CTRL6)->SetFocus(); } return TRUE; } } // ページのタブにフォーカスを移動 else { if (theApp.m_pSheet->GetFocus() == GetDlgItem(IDC_EXIT)) { m_pSheet->GetActivePage()->SetFocus(); m_pSheet->GetTabControl()->SetFocus(); return TRUE; } } } } return CFormView::PreTranslateMessage(pMsg); } 同じように各プロパティページの最後尾のコントロールにフォーカスがある状態でTabを押すとCFormViewに記述した以下の関数を呼ぶようにしました。 void CTestView::TabSetFocusFirstCtrl() { SetFocus(); GetDlgItem(IDC_PRINT)->SetFocus(); } 問題はこの関数の2行目でプログラムが強制終了してしまうことです。 デバックしたところ、 GetDlgItem(IDC_PRINT) でNULL値が返ってくることがわかりました。 ViewDlgに対する SerFocus の記述だけではいけないのでしょうか? 教えて下さい。 Windows NT 2000 / Microsoft Visual Studio .NET 2003 を使っています。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.