22

ウィンドウ プロシージャを使用してウィンドウ内のすべてのコントロールを追跡するアプリケーションを作成しました。

私の質問は、ウィンドウで最初に作成されたコントロールに最初にフォーカスを設定するにはどうすればよいですか?

4

1 に答える 1

46

MFC で特定のコントロールに初期フォーカスを設定するには、2 つの方法があります。

  1. 最初の最も簡単な方法は、コントロールのタブ オーダーを利用することです。Visual Studio のリソース エディターを使用してダイアログをレイアウトする場合、各コントロールにタブ インデックスを割り当てることができます。タブ インデックスが最も小さいコントロールが自動的に初期フォーカスを受け取ります。コントロールのタブ オーダーを設定するには、[書式] メニューから [タブ オーダー] を選択するか、Ctrl+を押しますD

  2. もう少し複雑な 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;
    }
    

    特定のコントロールのメソッドを呼び出すだけで、ダイアログ ボックスにフォーカスを設定しないでください。SetFocusRaymond Chenは、彼のブログで、なぜそれよりも複雑なのか、GotoDlgCtrl関数 (またはそれに相当するWM_NEXTDLGCTRLメッセージ) が好まれる理由を説明しています。

于 2011-02-25T07:04:09.473 に答える