如何获取 win32 c++ 应用程序中单选按钮的状态?
Posted
技术标签:
【中文标题】如何获取 win32 c++ 应用程序中单选按钮的状态?【英文标题】:How to get the state of radio buttons in win32 c++ application? 【发布时间】:2014-02-28 12:53:17 【问题描述】:。 我是 C++ 新手,并试图获取单选按钮的值以在我的应用程序中使用。 但我无法获得单选按钮的正确状态。 这是我编写的代码:
hDecRB = CreateWindow(TEXT("BUTTON"), TEXT("Decimal Result"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,20, 80, 150, 30, hWnd, NULL, NULL, NULL);
hDecRB = CreateWindow(TEXT("BUTTON"), TEXT("Binary Result"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,20, 120, 150, 30, hWnd, NULL, NULL, NULL);
hDecRB = CreateWindow(TEXT("BUTTON"), TEXT("Octal Result"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,20, 160, 150, 30, hWnd, NULL, NULL, NULL);
hDecRB = CreateWindow(TEXT("BUTTON"), TEXT("Hex Result"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,20, 200, 150, 30, hWnd, NULL, NULL, NULL);
if(BM_GETCHECK==BST_CHECKED)
flag=Button_GetState(hBinRB);
MessageBox(NULL,"CHECKED","sachin",MB_OK);
else
MessageBox(NULL,"Binary not checked","sachin",MB_OK);
MessageBox(NULL,(LPCSTR)flag,"sachin",MB_OK);
但是当我单击我的专用按钮以检查单选按钮状态时,它显示我在选中和未选中的条件下都未选中.. 请帮助我摆脱困境。 . .
【问题讨论】:
你的 if() 语句比较两个常量值,它总是 false。您当然希望实际使用 flag 值if (flag & BST_CHECKED)
。考虑使用 C++ 类库来帮助您编写此类代码,例如 MFC、Qt、wxWidgets 等。如果您想使用原始 winapi,Petzold 是必不可少的阅读材料。
【参考方案1】:
if(BM_GETCHECK==BST_CHECKED)
此条件将始终评估为假。这就是为什么它会告诉您按钮处于未选中状态,而不管按钮状态如何。
在你的情况下,你可能想要这样的东西:
if(Button_GetState(hDecRB) == BST_CHECKED)
MessageBox(NULL,"CHECKED","sachin",MB_OK);
else
MessageBox(NULL,"Binary not checked","sachin",MB_OK);
MessageBox(NULL,(LPCSTR)flag,"sachin",MB_OK);
您还需要将每个按钮存储在不同的 HWND 中。您正在为每一个使用 hDecRB,每次重新分配它时都会被覆盖。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb775986(v=vs.85).aspx
【讨论】:
【参考方案2】:如果您的按钮是作为对话框模板(对话框资源)的一部分创建的,那么您将使用
if (IsDlgButtonChecked(hDlg, buttonID) == BST_CHECKED)
使用对话框模板比像您的代码那样手动创建按钮窗口要容易得多...
【讨论】:
以上是关于如何获取 win32 c++ 应用程序中单选按钮的状态?的主要内容,如果未能解决你的问题,请参考以下文章