如何在win32中创建具有默认行为的按钮

时间:2012-06-13 19:16:26

标签: winapi button

我一直在尝试创建一个具有默认行为的按钮,即当用户按下ENTER时,该按钮被触发。 我创建了具有WS_TABSTOP样式的按钮,并向其发送了BM_SETSTYLE消息,其中BS_DEFPUSHBUTTON具有WPARAM参数 但它仍然没有用。

HWND hwnd_Ok = CreateWindow("button", "Ok", WS_VISIBLE | WS_CHILD | WS_TABSTOP, 285, 195, 70, 25, hwnd, (HMENU)OK_BUTTON, NULL, NULL);


SendMessage(hwnd_Ok, BM_SETSTYLE, (WPARAM)BS_DEFPUSHBUTTON, TRUE);

2 个答案:

答案 0 :(得分:4)

我正在尝试处理WM_GETDLGCODE,以便在控件的WndProc中使用WM_KEYDOWN消息获取VK_RETURN。示例代码:

case WM_GETDLGCODE: {
  if(wParam==VK_RETURN) {
    return DLGC_WANTALLKEYS;
  }
}
break;

答案 1 :(得分:1)

BS_DEFPUSHBUTTON只是添加到按钮的标志。您描述的行为(以及许多其他字段导航行为)实际上由IsDialogMessage实现,您免费获得的是模式对话框。

如果您尝试在自己的窗口类(或无模式对话框)中处理此问题,可以将IsDialogMessage添加到消息循环中以获得对话式样处理。