void abc()
{
CEdit *edit = (CEdit*)GetDlgItem(IDC_BUTTON5);
CEdit *edit2 = (CEdit*)GetDlgItem(IDC_STATIC1);
edit->ShowWindow(TRUE);
edit2->ShowWindow(TRUE);//隐藏该控件
}
为什么出错啊,我编的程序是:附窗口输入密码后,主界面隐藏一些窗口,编译没错,运行直接卡机控件界面IDC
{
CEdit *edit = (CEdit*)GetDlgItem(IDC_BUTTON5);
CEdit *edit2 = (CEdit*)GetDlgItem(IDC_STATIC1);
edit->ShowWindow(TRUE);
edit2->ShowWindow(TRUE);//隐藏该控件
}
为什么出错啊,我编的程序是:附窗口输入密码后,主界面隐藏一些窗口,编译没错,运行直接卡机控件界面IDC
CEdit *edit2 = (CEdit*)GetDlgItem(IDC_STATIC1); //目测ID号应该是Static,怎么会强制转换为CEdit*
CEdit *edit = static_cast<CEdit*>(GetDlgItem(IDC_BUTTON5));
居然是用c++就别用C语言式的转换,用static_cast多好,想你上面那种转换,如果转换失败edit指针就为空,只要判断一下指针是否为空就可以了
解决方法:1.核实一下你的EDIT资源绑定情况;2.判断一下指针是否为空,然后再:
edit->ShowWindow(TRUE);
edit2->ShowWindow(TRUE);//隐藏该控件
但你干嘛要用指针呢,直接用cedit 不行吗?
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看其参数是什么意思, 可以传什么值.
在IDC_BUTTON5所在的对话框类中提供一个接口来改变这些按钮的状态. 接口即一个函数.
edit2->ShowWindow(TRUE);//隐藏该控件这两个TRUE参数虽然也能通过编译,但是有问题的,可以百度一下ShowWindow函数