2010-09-28 74 views
1

我在設置對話框中的Tab鍵順序時遇到問題。要設置Tab鍵順序,我使用了函數SetWindowPos()。設置對話框中項目的Tab鍵順序

最初它會聚焦到其中一個對話框項目,但如果按下tab鍵,它將不會將焦點更改爲對話框上的其他項目。

請幫他解決問題。 波紋管是代碼...

HWND hBtn1 = GetDlgItem(hWnd, IDC_BTN_OPEN); 

HWND hBtn2 = GetDlgItem(hWnd, IDC_BTN_CLOSE); 
HWND hBtn3 = GetDlgItem(hWnd, IDC_BTN_SAVE); 

bool result = ::SetWindowPos(hBtn1, hBtn2, 0, 0, 0, 0,SWP_NOSIZE|SWP_NOMOVE); 
result = ::SetWindowPos(hBtn2, hBtn3, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); 

回答

3

你真的有設置由代碼選項卡順序? 只需在對話框設計器中按Ctrl + D!

更新: 使用SetWindowPos不會幫助你。您認爲它將定義taborder的參數只設置z順序,意味着如果控件重疊,控件的繪製順序。我不確定,但我認爲tab順序是由控件的創建順序定義的。

下一次更新: 可能的解決方法是觀察Tab鍵的鍵盤事件,然後獲取主動控件並將焦點設置到下一個應該出現的控件上。

+0

不,我想以編程方式設置它。 – 2010-09-28 13:00:45

+0

我在網上搜索設置標籤順序,但大多數人告訴使用SetWindowPos()。我以他們的任何方式設置選項卡順序編程。 – 2010-09-28 13:13:20

+0

IsDialogMessage實現製表符。它的邏輯是調用hwnd = GetWindow(hwnd,GW_NEXT);從當前的焦點控制HWND開始,直到找到具有WS_TABSTOP樣式的子窗口。 – 2010-09-28 15:50:42