2011-02-25 79 views

回答

30

有兩種方法可以將初始焦點設置爲MFC中的特定控件。

  1. 第一個,也是最簡單的方法就是利用你的控件選項卡順序的。當您使用Visual Studio中的資源編輯器佈局對話框時,可以爲每個控件分配一個選項卡索引。與最低選項卡索引的控件將自動收到初始焦點。要設置控件的Tab鍵順序,請從「Format」菜單中選擇「Tab Order」,或按Ctrl + D

  2. 第二種稍微複雜的方法是覆蓋表示對話框的類中的OnInitDialog function。在該功能中,您可以將輸入焦點設置爲您希望的任何控件,然後返回FALSE以指示您已明確將輸入焦點設置爲對話框中的其中一個控件。如果返回TRUE,框架會自動將焦點設置爲默認位置,如上所述,作爲對話框中的第一個控件。要將焦點設置爲特定控件,請調用GotoDlgCtrl method並指定您的控件。例如:

    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 explains here on his blog爲什麼它比這更復雜,爲什麼GotoDlgCtrl函數(或其等價函數,WM_NEXTDLGCTRL消息)是首選。

+0

其實我是問窗口過程中...... – karthik 2011-02-25 07:18:27

+1

@Karthik:如果你在窗口過程中,你沒有設置初始焦點。初始焦點是首次顯示對話框時焦點所在的控件。要設置它,您需要使用我描述的兩種方法之一。此外,當你使用MFC時,很少需要重寫'WndProc'函數。您應該針對您要回復的消息使用特定的功能。但是如果你堅持這樣做,你仍然可以使用'GotoDlgCtrl'方法,正如我在答案的第二部分中所演示的那樣。 – 2011-02-25 07:21:32

+1

我的錯誤是我在GetDlgItem()CWnd指針調用SetFocus(),而不是GotoDlgCtrl()。 GotoDlgCtrl()工作,但SetFocus()沒有。 – franji1 2015-04-29 18:36:09

相關問題