ウィンドウプロシージャを使用してウィンドウ内のすべてのコントロールを追跡するアプリケーションを作成しました。
私の質問は、ウィンドウで最初に作成されたコントロールに最初にフォーカスを設定するにはどうすればよいですか?
MFCの特定のコントロールに初期フォーカスを設定する方法は2つあります。
最初の最も簡単な方法は、コントロールのタブ順序を利用することです。 Visual Studioのリソースエディターを使用してダイアログをレイアウトする場合、各コントロールにタブインデックスを割り当てることができます。 最低タブインデックスを持つコントロールは、自動的に最初のフォーカスを受け取ります。コントロールのタブ順序を設定するには、[フォーマット]メニューから[タブ順序]を選択するか、を押します。 Ctrl+D。
2番目の、もう少し複雑な方法は、ダイアログを表すクラスの OnInitDialog
function をオーバーライドすることです。この関数では、入力フォーカスを任意のコントロールに設定してから、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
メッセージ)が優先されます。