抄的: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號:
我們都知道設置焦點需要用到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();
if(pWnd == NULL)
;//no focus
else
UINT nID = pWnd->GetDlgCtrlID();
SDK:
HWND hWnd = ::GetFocus();
if(hWnd == NULL)
;//no focus
else
UINT nID = ::GetDlgCtrlID(hWnd);
HWND hWnd = ::GetFocus();
if(hWnd == NULL)
;//no focus
else
UINT nID = ::GetDlgCtrlID(hWnd);