17
A
回答
30
有兩種方法可以將初始焦點設置爲MFC中的特定控件。
第一個,也是最簡單的方法就是利用你的控件選項卡順序的。當您使用Visual Studio中的資源編輯器佈局對話框時,可以爲每個控件分配一個選項卡索引。與最低選項卡索引的控件將自動收到初始焦點。要設置控件的Tab鍵順序,請從「Format」菜單中選擇「Tab Order」,或按Ctrl + D。
第二種稍微複雜的方法是覆蓋表示對話框的類中的
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
消息)是首選。
相關問題
- 1. 設置初始焦點
- 2. 在Silverlight中設置初始控件焦點
- 3. 如何在初始渲染後設置ICEFaces組件的焦點?
- 4. 在Gtkada中設置窗口焦點
- 5. 驗證控件 - 將焦點設置在特定的錨點上
- 6. 如何在佈局中設置初始焦點?
- 7. 顯示未設置焦點的窗口
- 8. 如何在wxWidgets中將鍵盤焦點設置爲NULL窗口?
- 9. 如何在ASCX用戶控件中設置控件焦點?
- 10. 如何在Java中設置初始窗口大小OpenGL
- 11. 如何在經典asp的子窗體中的控件onLoad中設置焦點?
- 12. 彈出窗口設置焦點
- 13. Jquery - 將焦點設置到窗口
- 14. 替代模糊()設置窗口焦點?
- 15. 將焦點設置到uifigure窗口
- 16. 如何在listview中設置特定項目的焦點。 Android的?
- 17. 如何將焦點設置在datagrid/gridview中的特定行上?
- 18. 如何在設置焦點控制
- 19. 如何在JavaScript模式窗口上設置焦點?
- 20. 如何將焦點設置爲特定的小部件
- 21. 如何在Silverlight的代碼中爲控件設置焦點?
- 22. 如何在flexganttfx中將焦點設置爲特定活動
- 23. 在silverlight中設置登錄子窗口的焦點
- 24. 如何在使用Caliburn.Micro時設置Silverlight中表單的初始焦點
- 25. 將焦點設置在Perl/GTK2控件
- 26. 使用applescript將焦點設置爲應用程序的特定窗口
- 27. 在彈出窗口焦點設置會話變量在ADF中
- 28. 如何將焦點設置爲Windows窗體應用程序中的控件?
- 29. 如何將焦點設置到另一個窗口?
- 30. 如何使用WatiN將焦點設置到瀏覽器窗口
其實我是問窗口過程中...... – karthik 2011-02-25 07:18:27
@Karthik:如果你在窗口過程中,你沒有設置初始焦點。初始焦點是首次顯示對話框時焦點所在的控件。要設置它,您需要使用我描述的兩種方法之一。此外,當你使用MFC時,很少需要重寫'WndProc'函數。您應該針對您要回復的消息使用特定的功能。但是如果你堅持這樣做,你仍然可以使用'GotoDlgCtrl'方法,正如我在答案的第二部分中所演示的那樣。 – 2011-02-25 07:21:32
我的錯誤是我在GetDlgItem()CWnd指針調用SetFocus(),而不是GotoDlgCtrl()。 GotoDlgCtrl()工作,但SetFocus()沒有。 – franji1 2015-04-29 18:36:09