我正在尝试用c ++ win32编写一个程序,我需要有多个复选框。更具体地说,这个程序有多个页面" (在用户单击下一个按钮后,我删除任何子窗口并用新窗口替换它们)。 因此,为了使代码易于理解,我需要一个函数,当调用时会调出几个字段(我知道如何处理这些字段)和一些复选框。问题是我不知道如何为每个人管理HWND,所以我点击的任何一个框只运行相同的代码(并且不检查任何框)。 MSDN没有提供太多帮助,我找到的唯一信息来源是how to make checkbox in win32? 这是我的代码中出现问题的部分。
/* checked_box1 , checked_box2 are globals */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
draw_obtions_screen(hwnd);
break;
case WM_COMMAND:
checked_box1 = IsDlgButtonChecked(draw_object, 1);
if (checked_box1) {
CheckDlgButton(hwnd, 1, BST_UNCHECKED);
SetWindowText(hwnd, TEXT("y"));
} else {
CheckDlgButton(hwnd, 1, BST_CHECKED);
SetWindowText(hwnd,"x");
}
checked_box2 = IsDlgButtonChecked(draw_object1, 1);
if (checked_box2) {
CheckDlgButton(hwnd, 1, BST_UNCHECKED);
SetWindowText(hwnd, TEXT("Y"));
} else {
CheckDlgButton(hwnd, 1, BST_CHECKED);
SetWindowText(hwnd,"X");
}
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
......
/* HWND draw_object,draw_object1 are global. The function is also prev declared*/
void draw_obtions_screen(HWND hwnd)
{
draw_object = CreateWindow ("BUTTON","check",
WS_VISIBLE | WS_CHILD | BS_CHECKBOX,
110, 10 ,100 ,30,
hwnd, NULL,NULL,NULL);
CheckDlgButton(hwnd, 1, BST_CHECKED);
draw_object1 = CreateWindow ("BUTTON","check another",
WS_VISIBLE | WS_CHILD | BS_CHECKBOX,
110, 60 ,130 ,30,
hwnd, NULL,NULL,NULL);
CheckDlgButton(hwnd, 1, BST_UNCHECKED);
}
代码将窗口的标题更改为" X" (在我点击的任何方框上)然后什么也没有。
我将提供任何类型的信息来源或答案。另外请留下一些信息来源供我进一步学习。谢谢!
答案 0 :(得分:1)
您可以通过HMENU参数将子ID分配给具有WS_CHILD样式的任何窗口的CreateWindowo(即,子窗口获取ID而不是菜单)。
然后将该ID作为所有WM_COMMAND消息的一部分发送。