GetCheck() 适用于检查按钮但不适用于单选按钮?

Posted

技术标签:

【中文标题】GetCheck() 适用于检查按钮但不适用于单选按钮?【英文标题】:GetCheck() working for check buttons but not radio buttons? 【发布时间】:2013-01-11 20:38:54 【问题描述】:

我刚刚学习如何在 Visual Studio 2010 中使用 MFC 制作对话框。

据我所见on msdn's website,GetCheck() 函数对于复选框和单选按钮的工作方式应该相同。

基本上我在两个滑块旁边有两个单选按钮。如果一个单选按钮打开,则该滑块被禁用,如果另一个单选按钮打开,则另一个滑块被禁用。

当我为复选框切换单选按钮时,这是我使用的代码:

void Cstring_copyierDlg::OnBnClickedSld1chk()


    UINT nCheck = m_slide1check.GetCheck();

    if(nCheck == BST_CHECKED)
        m_slider.EnableWindow(FALSE);
    
    else
        m_slider.EnableWindow(TRUE);
    

void Cstring_copyierDlg::OnBnClickedSld2chk()

    UINT nCheck = m_slide2check.GetCheck();

    if(nCheck == BST_CHECKED)
        m_slider2.EnableWindow(FALSE);
    
    else
        m_slider2.EnableWindow(TRUE);
    

这段代码运行良好。但是当我关闭单选按钮的复选框时,这是我使用的代码:

void Cstring_copyierDlg::OnBnClickedRad1()


    UINT nCheck = m_radio1.GetCheck();

    if(nCheck == BST_CHECKED)
        m_slider.EnableWindow(FALSE);
    
    else
        m_slider.EnableWindow(TRUE);
    

void Cstring_copyierDlg::OnBnClickedRad2()

    UINT nCheck = m_radio2.GetCheck();

    if(nCheck == BST_CHECKED)
        m_slider2.EnableWindow(FALSE);
    
    else
        m_slider2.EnableWindow(TRUE);
    

但是第二段代码在编译时返回以下错误:

error C2228: left of '.GetCheck' must have class/struct/union

什么给了?

【问题讨论】:

m_radio1是什么类型? 我不太确定它是什么类型,但要创建 m_radio1,我 Ctrl+双击单选按钮并将“变量名称:”设置为 m_radio1。我知道默认情况下是什么类型。 Visual Studio 带回了 MFC 类向导。如果您按 [Ctrl]+[Shift]+X,它会弹出一个对话框,其中包含您需要的所有信息。从 Class name 组合框中选择 Dialog/View 类,然后单击 Member Variables 选项卡。这应该可以帮助您识别m_radio1 的类型。与您的问题无关,我不建议使用 MFC 开始 Windows 开发。浏览自动生成的代码不会提供您需要的洞察力。从本质上讲,如果您从 MFC 开始,您将跳过强制性的学习体验:普通的 Win32 API 编程。 【参考方案1】:

您在添加变量向导中为 DDX 选择了错误的变量类型。您应该在那里选择控件类型。

要手动更改变量类型,请将 m_radio1 的类型替换为 CButton,并在 DoDataExchange 中将 DDX_Radio 替换为 DDX_Control。

【讨论】:

以上是关于GetCheck() 适用于检查按钮但不适用于单选按钮?的主要内容,如果未能解决你的问题,请参考以下文章

Typescript 索引属性约束检查适用于原始类型但不适用于对象文字?

表单验证适用于 2 个字段,但不适用于第 3 个字段 - 是啥破坏了验证检查

jQuery背景按钮动画适用于Chrome和IE8,但不适用于Firefox或IE9 [重复]

Android Webview Back按钮适用于模拟器,但不适用于设备

JQuery.Dirty 字段不适用于第一个“updateFormState”,但适用于第二个

MPI 代码不适用于 2 个节点,但适用于 1 个节点