如何在win32 c ++应用程序中获取单选按钮的状态?

时间:2014-02-28 12:53:17

标签: c++ winapi win32com

。 我是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);
                       }

但是当我点击我的dedecated按钮检查单选按钮状态时,它会在已检查和未检查的条件下显示我未选中状态。 请帮我摆脱这个。 。

2 个答案:

答案 0 :(得分:3)

if(BM_GETCHECK==BST_CHECKED)

此条件将始终评估为false。这就是为什么它告诉你按钮未经检查而不管按钮状态如何。

在你的情况下,你可能想要这样的东西:

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

答案 1 :(得分:0)

如果您的按钮是作为对话框模板(对话框资源)的一部分创建的,那么您将使用

if (IsDlgButtonChecked(hDlg, buttonID) == BST_CHECKED)

使用对话框模板比手动创建按钮窗口要容易得多,就像你的代码那样......