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按钮适用于模拟器,但不适用于设备