复选框checkbox初始化问题。急急急!!!!!!

liangqingchao 2012-10-11 04:19:34
我从控件列表中直接拖拽到窗口一个复选框checkbox 我程序中已经给这个复选框设置了一个全局变量。别的什么都没做。没有实例化它。但是我想打开窗口的时候。这个复选框默认为勾选状态。我应该怎么做?
一个很基础的小问题。可是我真的不会啊!!
求大牛
...全文
755 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tbg1986tbg 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:
请问下3楼的:
setcheck().只是对复选框和单选按钮有效,它是用来设置复选框或者单选按钮的状态的。
它的参数 可以BST_CHECKED ,TRUE,1

这3者有什么关系。
也没有发现在那里有指示他们 相等的。为什么结果却是一样的?

回6L
先看一下MSDN怎么说的http://msdn.microsoft.com/zh-cn/library/……
[/Quote]

学习了 。。。。。。
skipsol 2012-10-12
  • 打赏
  • 举报
回复
只要改三个地方

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Check(pDX, IDC_CHK, m_bChk); // 控件ID绑定BOOL型变量
}

CTestDlg::CTestDlg()
{
m_bChk = TURE; // 为绑定的变量设定初值
}

CTestDlg::OnInitDialog()
{
UpdateData(FALSE); // 根据绑定的值更新控件
}

cy2015yc 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
请问下3楼的:
setcheck().只是对复选框和单选按钮有效,它是用来设置复选框或者单选按钮的状态的。
它的参数 可以BST_CHECKED ,TRUE,1

这3者有什么关系。
也没有发现在那里有指示他们 相等的。为什么结果却是一样的?
[/Quote]
回6L
先看一下MSDN怎么说的http://msdn.microsoft.com/zh-cn/library/31deb72x(v=vs.100).aspx
其次setCheck不仅仅对复选框和单选按钮有效
最后之所以传入BST_CHECKED ,TRUE,1效果一样是因为VC中定义了以下几个宏
#define TRUE 1
#define BST_UNCHECKED 0x0000
#define BST_CHECKED 0x0001
#define BST_INDETERMINATE 0x0002
使用1作为参数是没有问题的,但是这样降低了代码的可读性和易理解性
使用TRUE作为参数效果虽然相同,但是这样做是有风险的,因为不是所有的编译器都是#define TRUE 1,其次会让别人误以为这个函数的参数时BOOL类型的。
tbg1986tbg 2012-10-12
  • 打赏
  • 举报
回复
请问下3楼的:
setcheck().只是对复选框和单选按钮有效,它是用来设置复选框或者单选按钮的状态的。
它的参数 可以BST_CHECKED ,TRUE,1

这3者有什么关系。
也没有发现在那里有指示他们 相等的。为什么结果却是一样的?
tbg1986tbg 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
引用 1 楼 的回复:
如果绑定的是BOOL变量,则在构造函数内将其值初始化爲TRUE;如果是控件变量,则在OnInitDialog()中调用SetCheck(BST_CHECKED)方法。
多看看MSDN,或者google/baidu。


LS正解:
如果你的checkbox绑定的变量是bool类型,那么只需要
m_checkbox1=TRUE;//fa……
[/Quote]

有道理。。。


那能问下。
setcheck().只是对复选框和单选按钮有效,它是用来设置复选框或者单选按钮的状态的。
它的参数 可以BST_CHECKED ,TRUE,1

这3者有什么关系。
也没有发现在那里有指示他们 相等的。为什么结果却是一样的?
傻X 2012-10-12
  • 打赏
  • 举报
回复

((CButton*)GetDlgItem(资源编号))->SetCheck(BST_CHECKED)

checkbox就是属于CButton的范畴的,不要惊讶
cy2015yc 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
如果绑定的是BOOL变量,则在构造函数内将其值初始化爲TRUE;如果是控件变量,则在OnInitDialog()中调用SetCheck(BST_CHECKED)方法。
多看看MSDN,或者google/baidu。


LS正解:
如果你的checkbox绑定的变量是bool类型,那么只需要
m_checkbox1=TRUE;//false为取消
Updat……
[/Quote]
楼上,你写的两点有值得商榷的地方。
首先,构造函数内给绑定的BOOL变量附上初值後是不需要也不可以调用UpdateData(FALSE);如果在控件创建完成后再赋值,是必须调用UpdateData(FALSE)的;
其次,SetCheck()的参数是int类型的,直接写TRUE虽然达到效果但不够严谨,具体可以参见MSDN的注解。
tbg1986tbg 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
如果绑定的是BOOL变量,则在构造函数内将其值初始化爲TRUE;如果是控件变量,则在OnInitDialog()中调用SetCheck(BST_CHECKED)方法。
多看看MSDN,或者google/baidu。
[/Quote]

LS正解:
如果你的checkbox绑定的变量是bool类型,那么只需要
m_checkbox1=TRUE;//false为取消
UpdateData(FALSE);//必须要

如果是控件类型的
m_checkbox2.SetCheck(TRUE);
cy2015yc 2012-10-11
  • 打赏
  • 举报
回复
如果绑定的是BOOL变量,则在构造函数内将其值初始化爲TRUE;如果是控件变量,则在OnInitDialog()中调用SetCheck(BST_CHECKED)方法。
多看看MSDN,或者google/baidu。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧