void abc()
{   
        CEdit *edit = (CEdit*)GetDlgItem(IDC_BUTTON5);
CEdit *edit2 = (CEdit*)GetDlgItem(IDC_STATIC1);
edit->ShowWindow(TRUE);
edit2->ShowWindow(TRUE);//隐藏该控件
}
为什么出错啊,我编的程序是:附窗口输入密码后,主界面隐藏一些窗口,编译没错,运行直接卡机控件界面IDC

解决方案 »

  1.   

    CEdit *edit = (CEdit*)GetDlgItem(IDC_BUTTON5);    //目测ID号应该是Button,怎么会强制转换为CEdit*
    CEdit *edit2 = (CEdit*)GetDlgItem(IDC_STATIC1);   //目测ID号应该是Static,怎么会强制转换为CEdit*
      

  2.   

    id有问题,正如楼上说的那样
    CEdit *edit = static_cast<CEdit*>(GetDlgItem(IDC_BUTTON5));
    居然是用c++就别用C语言式的转换,用static_cast多好,想你上面那种转换,如果转换失败edit指针就为空,只要判断一下指针是否为空就可以了
      

  3.   

    确实如3楼所讲,(IDC_BUTTON5)和(IDC_STATIC1)都不是CEdit型的变量,强转可能导致出现空指针或无效指针。
    解决方法:1.核实一下你的EDIT资源绑定情况;2.判断一下指针是否为空,然后再:
    edit->ShowWindow(TRUE);
    edit2->ShowWindow(TRUE);//隐藏该控件
      

  4.   

    逻辑上来说,应该是没啥问题
    但你干嘛要用指针呢,直接用cedit 不行吗?
      

  5.   

     CEdit *edit = (CEdit*)GetDlgItem(IDC_BUTTON5);
    CEdit *edit2 = (CEdit*)GetDlgItem(IDC_STATIC1);1. 因为你使用了强制转换, 并且是可以进行的强制转换, 所以编译是不会报错的,
    2. 运行时报错, 就像前面几楼说的, 因为强制转换成了错误的类型. 或者那个ID对应的控件根本就是不存在.其实你只想显示或者隐藏一个控件, 直接使用CWnd类的函数即可.GetDlgItem(IDC_BUTTON5)->ShowWindow(SW_SHOW);  //SW_SHOW表示显示
    GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);  //SW_HIDE表示隐藏.你使用ShowWindow(TRUE)这样的参数也是错误的, 不要相当然的使用这些接口, 应该查下MSDN看其参数是什么意思, 可以传什么值.
      

  6.   

    GetDlgItem(IDC_BUTTON5) 这个button5不是我正在运行的窗口的按钮,是另一个窗口的按钮,但是我要隐藏它必须得去调用button5窗口所在的类的函数,但是每次调用运行到另一个类的这个窗口的函数的时候 就出错,是不是不能远程调用
      

  7.   

    其它窗口的当然是不能这样使用的. 因为不同的对话框可以有相同ID的按钮的.你想减少对话框类间的偶合, 那么可以使用windows消息来通知, 不过不是挺麻烦的.
    在IDC_BUTTON5所在的对话框类中提供一个接口来改变这些按钮的状态. 接口即一个函数.
      

  8.   

    两个窗口之间的操作,使用windows消息或者公共接口。
      

  9.   

    edit->ShowWindow(TRUE);
    edit2->ShowWindow(TRUE);//隐藏该控件这两个TRUE参数虽然也能通过编译,但是有问题的,可以百度一下ShowWindow函数