如何获取 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。您当然希望实际使用 flagif (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++ 应用程序中单选按钮的状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jquery获取表中单选按钮的值

哪个是 MFC C++ 中单选组合框的事件处理程序

如何更改 Metro 应用程序的 XAML/C# 中单选按钮的样式?

jsp中单选框怎么调节的不可选

嵌套表单中单选按钮的 OnChange 事件

在 GridLayout 中居中单选按钮