ウィンドウ プロシージャを使用してウィンドウ内のすべてのコントロールを追跡するアプリケーションを作成しました。
私の質問は、ウィンドウで最初に作成されたコントロールに最初にフォーカスを設定するにはどうすればよいですか?
MFC で特定のコントロールに初期フォーカスを設定するには、2 つの方法があります。
最初の最も簡単な方法は、コントロールのタブ オーダーを利用することです。Visual Studio のリソース エディターを使用してダイアログをレイアウトする場合、各コントロールにタブ インデックスを割り当てることができます。タブ インデックスが最も小さいコントロールが自動的に初期フォーカスを受け取ります。コントロールのタブ オーダーを設定するには、[書式] メニューから [タブ オーダー] を選択するか、Ctrl+を押しますD。
もう少し複雑な 2 番目の方法は、ダイアログを表すクラスでOnInitDialog
関数をオーバーライドすることです。その関数では、任意のコントロールに入力フォーカスをFALSE
設定してから、ダイアログ ボックス内のコントロールの 1 つに入力フォーカスを明示的に設定したことを示すために戻ることができます。を返すTRUE
と、フレームワークは、ダイアログ ボックスの最初のコントロールとして上記で説明した既定の場所にフォーカスを自動的に設定します。特定のコントロールにフォーカスを設定するには、GotoDlgCtrl
メソッドを呼び出してコントロールを指定します。例えば:
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// Add your initialization code here
// ...
// Set the input focus to your control
GotoDlgCtrl(GetDlgItem(IDC_EDIT));
// Return FALSE because you manually set the focus to a control
return FALSE;
}
特定のコントロールのメソッドを呼び出すだけで、ダイアログ ボックスにフォーカスを設定しないでください。SetFocus
Raymond Chenは、彼のブログで、なぜそれよりも複雑なのか、GotoDlgCtrl
関数 (またはそれに相当するWM_NEXTDLGCTRL
メッセージ) が好まれる理由を説明しています。