我从控件列表中直接拖拽到窗口一个复选框checkbox    我程序中已经给这个复选框设置了一个全局变量。别的什么都没做。没有实例化它。但是我想打开窗口的时候。这个复选框默认为勾选状态。我应该怎么做?
一个很基础的小问题。可是我真的不会啊!!
求大牛

解决方案 »

  1.   

    如果绑定的是BOOL变量,则在构造函数内将其值初始化爲TRUE;如果是控件变量,则在OnInitDialog()中调用SetCheck(BST_CHECKED)方法。
    多看看MSDN,或者google/baidu。
      

  2.   


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

  3.   

    楼上,你写的两点有值得商榷的地方。
    首先,构造函数内给绑定的BOOL变量附上初值後是不需要也不可以调用UpdateData(FALSE);如果在控件创建完成后再赋值,是必须调用UpdateData(FALSE)的;
    其次,SetCheck()的参数是int类型的,直接写TRUE虽然达到效果但不够严谨,具体可以参见MSDN的注解。
      

  4.   


    ((CButton*)GetDlgItem(资源编号))->SetCheck(BST_CHECKED)checkbox就是属于CButton的范畴的,不要惊讶
      

  5.   


    有道理
    那能问下。
    setcheck().只是对复选框和单选按钮有效,它是用来设置复选框或者单选按钮的状态的。
    它的参数  可以BST_CHECKED ,TRUE,1这3者有什么关系。
    也没有发现在那里有指示他们 相等的。为什么结果却是一样的?
      

  6.   

    请问下3楼的:
    setcheck().只是对复选框和单选按钮有效,它是用来设置复选框或者单选按钮的状态的。
    它的参数 可以BST_CHECKED ,TRUE,1这3者有什么关系。
    也没有发现在那里有指示他们 相等的。为什么结果却是一样的?
      

  7.   

    回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类型的。
      

  8.   

    只要改三个地方void CTestDlg::DoDataExchange(CDataExchange* pDX)
    {
        DDX_Check(pDX, IDC_CHK, m_bChk); // 控件ID绑定BOOL型变量
    }CTestDlg::CTestDlg()
    {
        m_bChk = TURE;  // 为绑定的变量设定初值
    }CTestDlg::OnInitDialog()
    {
        UpdateData(FALSE); // 根据绑定的值更新控件
    }