2010-08-13 115 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