2011-12-27 56 views
4

因爲我(終於)學習用C++編寫Windows應用程序我偶然發現了這一點:我有一個對話框,我用CreateDialog()創建,我也有一個默認按鈕。但是,每次按TABENTER時,都不會發生任何情況,控制焦點也不會更改,也不會激活默認按鈕。這是我的對話框的資源。在C++中的對話框沒有收到某些擊鍵

IDD_MAINWIND DIALOG 0, 0, 312, 205 
STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_GROUP | WS_POPUP | WS_SYSMENU 
EXSTYLE WS_EX_WINDOWEDGE 
CAPTION "Dialog" 
FONT 8, "Tahoma" 
{ 
    PUSHBUTTON  "&Send", IDC_BUTTON_SEND , 280, 168, 22, 14, BS_DEFPUSHBUTTON 
    LTEXT   "Hello", IDC_STATIC1, 9, 9, 296, 149, SS_LEFT | SS_NOPREFIX | SS_SUNKEN, WS_EX_TRANSPARENT 
    EDITTEXT  IDC_MESSAGE, 9, 168, 265, 13, ES_AUTOHSCROLL 
    PUSHBUTTON  "Tools", IDC_BUTTON_TOOLS, 8, 185, 146, 14 
    PUSHBUTTON  "Exit", IDC_BUTTON_EXIT, 163, 185, 136, 14 
} 

任何幫助,非常感謝。尤其是在聖誕節的第三天。

+0

任何資源編輯器會照顧這個要求。你在使用哪一個? – 2011-12-27 13:17:07

+0

真是太遺憾了。我自己寫,希望我能學到這些。我正在使用Code :: Blocks,並且我正在努力工作......但至少它工作正常。 – 2011-12-27 13:26:29

+0

夠公平的。手工操作並不困難,只是很乏味。樣式標誌(比如你需要的WS_TABSTOP)與資源腳本沒有任何直接關係。它們是您爲所有窗口/控件設置的標準窗口樣式,記錄在這裏(http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600.aspx)。當你對自己的技能感覺舒適(或習慣於厭倦)時,請下載[ResEdit](http://www.resedit.net/)。 – 2011-12-27 13:35:42

回答

3

解決方案是將WS_TABSTOP樣式添加到對話框的每個子元素。

對於前:

PUSHBUTTON  "&Send", IDC_BUTTON_SEND , 280, 168, 22, 14, BS_DEFPUSHBUTTON | WS_TABSTOP 

確保每一個控件都有WS_VISIBLE | WS_CHILD風格。 另外不要忘記在窗口中添加WS_EX_CONTROLPARENT樣式,並從對話窗口中刪除WS_GROUP樣式。

此外

檢查對話框PROC

或者,如果您使用的窗口過程而不是使用下面的代碼片段

Tab鍵是由對話管理器,而不是窗口管理器提供。因此,爲了獲得標籤處理,你需要調用IsDialogMessage在您的消息循環與你的窗口的HWND:

/* Run the message loop. It will run until GetMessage() returns 0 */ 
while (GetMessage (&messages, NULL, 0, 0)) 
{ 
    if (!IsDialogMessage(hwnd, &messages)) 
    { 
     /* Translate virtual-key messages into character messages */ 
     TranslateMessage(&messages); 
     /* Send message to WindowProcedure */ 
     DispatchMessage(&messages); 
    } 
} 

請了解WS_TABSTOP和WS_GROUP對話框項目屬性。

這個環節應該對你有所幫助:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644994.aspx#controls

+0

這並沒有真正幫助我,同樣的事情發生。我應該說我每次按回車都會聽到嗶嗶聲。 – 2011-12-27 13:29:00

+0

然後嘗試添加'WS_CHILD | WS_VISIBLE'樣式到控件。 – DaddyM 2011-12-27 13:52:58

+0

做到了這一點。還是行不通。 – 2011-12-27 13:54:24

相關問題