【问题标题】:Programmatically select an MFC radio button以编程方式选择 MFC 单选按钮
【发布时间】:2008-09-16 15:22:02
【问题描述】:

当我初始化一个对话框时,我想选择表单上的一个单选按钮。我没有看到使用类向导关联控件变量的方法,就像您通常使用 CButtons、CComboBoxes 等做的那样......

此外,它甚至不存在 CRadioButton 类。

如何选择几个单选按钮之一?

【问题讨论】:

    标签: winapi mfc


    【解决方案1】:

    使用CWnd::CheckRadioButton 设置选择组中的一个按钮,使用CWnd::GetCheckedRadioButton 检索选定按钮的ID。请务必在您的对话框对象上调用这些方法,而不是任何单选按钮对象。

    【讨论】:

    • 这应该是公认的答案。 注意: 它是 Dialog-> 而不是 RadioButton->
    • 我来到这里是因为在DDX_Radio 上获得了一个ASSERT,这是因为从UpdateData 调用中调用了pRadioButton->SetCheck(),该调用在多次分配单选按钮值时触发。
    • 此方法依赖于控件的 ID 顺序。 DDX_Radio 使用 Z 顺序和 WS_GROUP 标志。这样可以避免对资源 ID 进行严格排序。
    【解决方案2】:

    单选按钮和复选按钮只是按钮。使用CButton 控件并使用GetCheck/SetCheck

    【讨论】:

      【解决方案3】:

      按照 mos 所说的,以下方法成功了:

      CButton* pButton = (CButton*)GetDlgItem(IDC_RADIOBUTTON);
      pButton->SetCheck(true);
      

      【讨论】:

        【解决方案4】:
        void CMyDlg::DoDataExchange(CDataExchange* pDX)
        {
          ...
          DDX_Radio(pDX, IDC_RADIO1, m_Radio);
          ...
        }
        

        但它是向导生成的同一件事

        【讨论】:

        • 这个选项比 CWnd::GetCheckedRadioButton() 更好,因为它使用窗口 Z 顺序来定位按钮,并且将独立于 ID 值工作,可以是一个 PITA 来维护。
        【解决方案5】:

        你可以使用这个单行:

        ::SendMessage(GetDlgItem(IDC_RADIO1)->m_hWnd, BM_SETCHECK, BST_CHECKED, NULL);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-09
          • 2011-08-15
          • 1970-01-01
          • 1970-01-01
          • 2012-06-09
          相关资源
          最近更新 更多