2010-08-13 118 views
2

我的按鈕有這些風格:如何讓BS_DEFPUSHBUTTON正常工作?

WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON 

創建並適當補光燈,但是在我的編輯控件,當我按下Enter鍵,它什麼也不做!

繼承人的風格我的編輯控件:

WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | WS_TABSTOP 
我沒有使用一個對話框

,我已創建使用CreateWindow的(我的窗口),我有消息循環處理tab順序:

MSG msg; 
while (GetMessage (&msg, NULL, 0, 0)) 
{ 
    if (!IsDialogMessage(hActiveWindow, &msg)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
} 

「hActiveWindow」是用戶當前活動窗口的句柄。 tabbing的作品,但我有一種感覺,這是與DEFPUSHBUTTON混淆。

有幫助嗎?

+2

一個側面說明,你同時應該輸入'而(的GetMessage(味精,NULL,0,0)> 0)'。 GetMessage可以返回-1錯誤 – Default 2010-08-13 16:10:36

+0

只是爲了好玩取出if(!IsDialogMessage(hActiveWindow,&msg)) 行。怎麼了? – JustBoo 2010-08-13 16:12:33

+0

保持不變,除了我沒有tabbing – Kaije 2010-08-13 16:19:41

回答

3

可能是因爲您的按鈕未設置爲默認值。一個解決辦法是設置默認的按鈕行爲與DM_SETDEFID

/* 
in: win: HWND of the window you have 
in: id: your id of your default button 
*/ 
SendMessage(win, DM_SETDEFID, id, 0); 
+0

看來,當你按下回車鍵時,它發送wparam的低位作爲ID 1,所以我一直在使用:)雖然我支持這將它設置爲任何你想要的數字?謝謝回覆。 – Kaije 2010-08-18 20:15:19

+0

是的,我添加到你的帖子的評論解釋說:默認值是IDOK,它被定義爲1.我很高興你已經完成了:) – Default 2010-08-18 20:19:00

+0

我的理解是,DM_SETDEFID只有在你使用DefDlgProc通過CreateDialog,這意味着它不會與問題指定的CreateWindow一起使用。 – 2017-08-15 15:36:20