动态创建5个check box,1个button,当我单击button的时候,要清除check box 的已选状态。我的代码如下:
void CMyDialog::Onreselect() //button单击消息
{         CButton *pCheck;
for(int i=0; i<=4; i++)
{
pCheck = (CButton*)GetDlgItem(4000+i)//4000为我创建的   
check box的ID号;
if( BST_CHECKED == pCheck->GetCheck() )
{   
pCheck->SetCheck(BST_UNCHECKED);

}
}
程序运行出错。清高手指点一下。
}

解决方案 »

  1.   

    pCheck是否为NULL,创建的5个checkbox其ID是否在4000~4004的范围内?
      

  2.   

    我动态创建按钮的几句代码和按钮的单击处理函数被我写成我自定义类里面,在其他类里里面调用创建按钮的函数。现在的问题找到了就是如果我直接在我自定义的类里创建的话,单击的按钮的话就没有问题,如果再其他类里面调用的话,就会导致pCheck为NULL,我应该如何处理这个问题?
      

  3.   

    当我单击按钮的时候,我该如何才能找到check box的id呢?check box是在其他类里创建的。
      

  4.   

    这样的话是不是不可能得到GetDlgItem(4000+i)呀?还有什么好的方法来清除清除check box 的已选状态?
      

  5.   

    CButton *m_pBtn[5];
    for(int i=0; i<=4; i++)
    {
    pCheck[i] = (CButton*)GetDlgItem(4000+i);
    if( BST_CHECKED == pCheck->GetCheck() )
    {   
    pCheck[i]->SetCheck(BST_UNCHECKED);

    }
    }
      

  6.   

    上面写错了点
    CButton *pCheck[5];
      

  7.   

    不行,这样还是报告错误
    _AFXWIN_INLINE int CButton::GetCheck() const
    { ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0); }
      

  8.   

    你看GetDlgItem后,pCcheck是否正常
      

  9.   

    BOOL CMyDialog::CreateButton(int i ,LPCTSTR lpszCaption)
    {
    MyButton=new CButton;
        MyButton->Create(lpszCaption, WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_FLAT, CRect(18,(20+20*i),170,(40+20 *i)), this, 4000+i);

    return 0L;

    }void CMyDialog::Onreselect() //button单击消息
    {
    CButton *pCheck[5];
    for(int i=0; i<=4; i++)
    {
    pCheck[i] = (CButton*)GetDlgItem(4000+i);
    if( BST_CHECKED == pCheck->GetCheck() )
    {   
    pCheck[i]->SetCheck(BST_UNCHECKED);

    }
    }再其他类里实现
    CMyDialog *yy =new CMyDialog();
    yy->CreateButton(1,"12316");程序运行后我单击按钮的话出现上面的提示错误。
      

  10.   

    用watch观察后
    pCheck=0x0012f6a0CButton={CButton hWnd=???}
    后面的[0]。。都是上面的错误。向我上面写的程序,是不是不能得到它门的id?
      

  11.   

    发到
    [email protected]
    看看