MFC中如何將焦點設置到指定控件上


抄的:https://blog.csdn.net/libaineu2004/article/details/24377105?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

 

我們常常會有這樣的需求,想在窗口打開的時候就將焦點(光標)設置到某個指定的控件上去。
我們都知道設置焦點需要用到setFocus這個方法(幾乎任何編程環境都這樣VC,C#,VB,VF都這樣)。
但在VC中我們使用了GetDlgItem(IDC_XX)->SetFocus()並不一定會達到我們需要的效果。
如果我們僅僅設置了SetFocus()那是不夠的,我們還需要將對話框中的OnInitDialog的最后那句return設置為"FALSE";
 
我曾經在對話框中對各個控件的輸入進行校驗檢測,當檢測到不滿足要求的輸入則會彈出對話框提示。
我本來的目的是彈出提示框,但確定后回到窗體中后就將焦點和光標設置到對應的控件上,結果死都上不去。
 
一開始我以為是Setfocus的設置無效,后面發現是邏輯上錯了,因為當提示框顯示的時候,在提示框彈出前通過SetFocus設置的焦點都將作廢。
 
發現這一點后,我將彈出提示框前需要設置獲得焦點的目標控件存儲起來,等提示框顯示完了我仍然可以對該控件進行設置焦點的操作,問題總算解決了。
 
 
獲取到焦點所在的控件的ID號:
CWnd *pWnd = GetFocus();
if(pWnd == NULL)
;//no focus
else
UINT nID = pWnd->GetDlgCtrlID();
SDK:
HWND hWnd = ::GetFocus();
if(hWnd == NULL)
;//no focus
else
UINT nID = ::GetDlgCtrlID(hWnd);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM