2010-09-28 33 views
3

我正在使用用CreateWindowEx()創建的簡單對話框來處理Windows項目,它包含多個加載了CreateDialog()的窗格以從資源文件加載佈局。在子窗格上有一些控件,包括文本框和按鈕,我希望使用TAB進行導航,但是我得到的只是Windows的'bing',告訴我密鑰沒有任何作用。我的消息循環是這樣的:使TAB鍵在Windows對話框中工作

while(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) 
{ 
    if(!IsDialogMessage(0, &msg)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
} 

而且在風格上還有其所有者窗格WS_EX_CONTROLPARENT集中的每一個控制窗口WS_TABSTOP設置。

還有什麼我需要做的,使標籤鍵工作?

謝謝, Ĵ

回答

3

試試這個:

http://support.microsoft.com/kb/71450(如何使用其中的IsDialogMessage()調用對於許多無模式對話框)

你窗格是無模式對話框和的IsDialogMessage負責處理tab鍵。我希望這篇文章完全符合你的情況。

+0

我剛剛在文章中嘗試過這種技術,但它並沒有帶來任何不同。這是加載對話框資源的正確方法還是有更好的方法? – JWood 2010-09-28 12:33:55

2

的WS_TABSTOP樣式 的WS_TABSTOP樣式指定該用戶可以通過按TAB鍵或SHIFT + TAB鍵移動的控制。

當用戶按下TAB或SHIFT + TAB時,系統首先確定這些鍵是否由當前具有輸入焦點的控件處理。它向控件發送WM_GETDLGCODE消息,並且如果控件返回DLGC_WANTTAB,則系統將該按鍵傳遞給控件。否則,系統使用GetNextDlgTabItem函數來查找下一個可見但未禁用且具有WS_TABSTOP樣式的控件。搜索從當前具有輸入焦點的控件開始,並按照創建控件的順序進行,即在對話框模板中定義它們的順序。當系統找到具有所需特性的控制器時,系統會將輸入焦點移至該位置。

如果搜索具有WS_TABSTOP樣式的下一個控件遇到具有WS_EX_CONTROLPARENT樣式的窗口,系統會遞歸搜索該窗口的子元素。

應用程序還可以使用GetNextDlgTabItem來定位具有WS_TABSTOP樣式的控件。該函數在不移動輸入焦點的情況下檢索具有WS_TABSTOP樣式的下一個或上一個控件的窗口句柄。

來源:MSDN。

+0

感謝您的信息。我之前在MSDN中遇到過這個問題,似乎表明我所做的是正確的。我的父窗格具有WS_EX_CONTROLPARENT樣式集,我的文本框設置了WS_TABSTOP,但仍然沒有任何內容。 – JWood 2010-09-28 12:35:15

1
if(!IsDialogMessage(0, &msg)) 

第一個參數不應該爲NULL,它必須是一個對話框的句柄。當然痛苦。