如何使复选框独占?

时间:2017-06-13 10:20:09

标签: c++ winapi

我是WinAPI的初学者,并尝试修改其他人的代码,使一对独立的复选框在以前是非独占的。

我最初的尝试是如果检查了一个,则立即取消选中另一个,但这显然只能在一个方向上起作用。如果检查了IDC_2并且我尝试检查IDC_1,它会再次触发第一个'if'语句,但它会失败。

这是我的代码:

static WDL_DLGRET dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    if (IsDlgButtonChecked(hwndDlg, IDC_1)) {

        // do something

        // try to make exclusive 
        CheckDlgButton(hwndDlg, IDC_2, BST_UNCHECKED);
    }

    if (IsDlgButtonChecked(hwndDlg, IDC_2)) {

        // do something

        // try to make exclusive 
        CheckDlgButton(hwndDlg, IDC_1, BST_UNCHECKED);
    }
}

我知道单选按钮,但在这种情况下,选择也可以是非互斥的。可以检查两个盒子中的非盒子(但不能同时检查两个盒子),所以我认为单选按钮在这里不是正确的选择,或者?

1 个答案:

答案 0 :(得分:1)

你有两个立即出现的解决方案

  1. 单选按钮但添加第三个"无"选项
  2. 对复选框激活做出反应(勾选)并清除其他复选框。
  3. 采取选择1.最不可取的原则。颠覆常见的(众所周知的和功能上可接受的)用户界面是一个坏主意。

    如果这是稍后验证输入的设置,则可以保留复选框,例如在您随后提交的对话框或表单中,但您需要添加以下行的说明:

      

    选择下面的一个选项   然后执行验证,拒绝接受,直到选择最多一个。

    选择选项1。