使用 WINAPI 如何更改复选框按钮的值
Using WINAPI how do I change the value of a checkbox button?
目前我有一个在WM_CREATE中创建的复选框:
hwndButtonPollFlag =
CreateWindow(
TEXT("BUTTON"),
TEXT(sA.getMonitor(monitorSelected)->szDevice),
WS_CHILD | WS_VISIBLE | SS_WHITERECT | BS_CHECKBOX,
0,
0,
0,
0,
hwnd,
(HMENU)IDB_PollFlag,
hInstance,
NULL);
每当单击另一个按钮时,我都会尝试更改它的值:
if (sA.getScreenArray(monitorSelected)->getPollFlag())
{
SetWindowLongPtr(hwndButtonPollFlag, GCL_STYLE, WS_VISIBLE | BST_CHECKED);
}
else
{
SetWindowLongPtr(hwndButtonPollFlag, GCL_STYLE, WS_VISIBLE | BST_UNCHECKED);
}
SetWindowText(hwndButtonPollFlag, TEXT(sA.getMonitor(monitorSelected)->szDevice));
这确实会更改复选框旁边显示的文本,但不会更改按钮的实际状态。另外,我希望复选框只有两种状态(选中或未选中(,除了在按钮返回中之外,还有其他方法可以创建该效果
,如下所示:switch (HIWORD(wParam))
{
case BST_CHECKED:
sA.getScreenArray(monitorSelected)->setPollFlag(true);
return 0;
case BST_INDETERMINATE:
if (sA.getScreenArray(monitorSelected)->getPollFlag())
{
SetWindowLongPtr(hwndButtonPollFlag, GCL_STYLE, WS_VISIBLE | BST_UNCHECKED);
}
else
{
SetWindowLongPtr(hwndButtonPollFlag, GCL_STYLE, WS_VISIBLE | BST_CHECKED);
}
return 0;
case BST_UNCHECKED:
sA.getScreenArray(monitorSelected)->setPollFlag(false);
return 0;
}
编辑:正如Mark Ransom所说,我使用了带有BM_GETCHECK和BM_SETCHECK标志的消息,如下所示:
case IDB_MONITOR:
monitorSelected = LOWORD(lParam);
if (sA.getScreenArray(monitorSelected)->getPollFlag())
{
SendMessage(hwndButtonPollFlag, BM_SETCHECK, BST_CHECKED, NULL);
}
else
{
SendMessage(hwndButtonPollFlag, BM_SETCHECK, BST_UNCHECKED, NULL);
}
SetWindowText(hwndButtonPollFlag, TEXT(sA.getMonitor(monitorSelected)->szDevice));
return 0;
case WM_COMMAND:
//sA.getScreenArray(monitorSelected)->setPollFlag(LOWORD(lParam));
switch (LOWORD(wParam))
{
case IDB_PollFlag:
if (SendMessage(GetDlgItem(hwnd, IDB_PollFlag), BM_GETCHECK, 0, 0) == BST_CHECKED)
{
SendMessage(hwndButtonPollFlag, BM_SETCHECK, BST_CHECKED, NULL);
sA.getScreenArray(monitorSelected)->setPollFlag(true);
}
else {
SendMessage(hwndButtonPollFlag, BM_SETCHECK, BST_UNCHECKED, NULL);
sA.getScreenArray(monitorSelected)->setPollFlag(false);
}
break;
}
return 0;
您需要
发送BM_SETCHECK
消息。
SendMessage(hwndButtonPollFlag, BM_SETCHECK, BST_CHECKED, 0);
BST_CHECKED
和BST_UNCHECKED
不是窗口样式,它们只是CheckDlgButton
和IsDlgButtonChecked
API 函数使用的标志值。 CheckDlgButton
是调用以更改其状态的函数。
(或者,您可以将BM_SETCHECK
和BM_GETCHECK
消息直接发送到按钮以获得相同的效果(。
相关文章:
- 根据变量使Qt UI中的复选框为已选中/未选中
- "动态创建的事件处理程序"复选框
- 有没有办法在取消选中复选框时隐藏按钮?
- 如何删除Qt设计器中自定义插件的QString属性的"translatable"复选框?
- 设置复选框选项C++
- 如何在所有者描述的 MFC CMenu 派生菜单中显示复选框?
- 如何在MFC对话框应用程序中默认将复选框设置为选中?
- 如何使复选框独占
- AccessObjectFromPoint 返回客户端对象而不是复选框
- Windows 32 API:2个复选框作为一个
- 如何设置按钮的背景颜色,包括复选框按钮
- Qt复选框勾选所有按钮
- C++ 复选框就像单选按钮 WINAPI ( 无 MFC )
- 如何在 Windows 上区分按钮和复选框消息
- 使用 WINAPI 如何更改复选框按钮的值
- C++ MFC、带复选框的自定义网格、单选按钮
- MFC:如何在LVS_EX_CHECKBOXES样式的列表ctrl中获得复选框按钮的wnd
- Qt c++ QToolBox:如何添加复选框/按钮标题
- Qt QTableView实现切换按钮和复选框委托
- Qt复选框/工具按钮,带有自定义/不同的检查/未选中的图标