~MFC 按钮隐藏有关问题
求助~~~MFC 按钮隐藏问题
两个对话框A和B,A中输入数字n,点击按钮让B对话框中的按钮隐藏(50-n)个。
A.Button:
void A::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
char Text[5];
GetDlgItemText(IDC_EDIT1,Text,10);
CString s;
s.Format(_T("%s"), Text);
B *b;
cman = (B*)GetDlgItem(IDD_DIALOG_MANU);
int n = atoi(s);
if(n >= 1 && n <= 50)
{
b->ButtonNum = n;
OnOK();
}
else
{
MessageBox("您输入的数字超出范围!!");
OnCancel();
}
}
B.OnInitDialog:
BOOL B::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
InitButton(ButtonNum);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void B::InitButton(int Num)
{
CButton *cb;
for(int j = IDC_BUTTON50; j >= (IDC_BUTTON1 + Num); j--)
{
MessageBox("3");
cb = (CButton*)GetDlgItem(j);
MessageBox("4");
cb->ShowWindow(SW_HIDE);
//MessageBox("4");
}
}
代码执行到b->ButtonNum = n无响应退出程序:TestComm.exe 中的 0x01389882 处未处理的异常: 0xC0000005: 写入位置 0x000000e0 时发生访问冲突
请问各位这是什么问题?我要实现我的功能有没有其他的方法?谢谢各位!
------解决方案--------------------
b->ButtonNum = n;//b没有被初始化
------解决方案--------------------
B *b;
没有new,也不是活得对话框对象的地址,当然要崩溃了
------解决方案--------------------
指针和实体要区分
B b;
b.ButtonNum = n;
要么这么玩
------解决方案--------------------
指针和实体要区分
B b;
b.ButtonNum = n;
要么这么玩
------解决方案--------------------
B *b;//这里没有初始化,肯定挂
在A窗口中要更新B窗口的控件。
可先将B窗口的指针传给A,
再在A中通过指针访问(且要确保B窗口对象已经创建,并且没有消毁)!
------解决方案--------------------
B *b;
没有初始化,
------解决方案--------------------
B *b;指针没有初始化,0xC0000005在很多情况下就是访问了一个空指针,并对这个指针进行操作引发的。
------解决方案--------------------
CButton *cb;
改为
CButton *cb = new CButton();
///////////////////////////
你通过对变量监视,就会很明显发现这个问题,
两个对话框A和B,A中输入数字n,点击按钮让B对话框中的按钮隐藏(50-n)个。
A.Button:
void A::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
char Text[5];
GetDlgItemText(IDC_EDIT1,Text,10);
CString s;
s.Format(_T("%s"), Text);
B *b;
cman = (B*)GetDlgItem(IDD_DIALOG_MANU);
int n = atoi(s);
if(n >= 1 && n <= 50)
{
b->ButtonNum = n;
OnOK();
}
else
{
MessageBox("您输入的数字超出范围!!");
OnCancel();
}
}
B.OnInitDialog:
BOOL B::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
InitButton(ButtonNum);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void B::InitButton(int Num)
{
CButton *cb;
for(int j = IDC_BUTTON50; j >= (IDC_BUTTON1 + Num); j--)
{
MessageBox("3");
cb = (CButton*)GetDlgItem(j);
MessageBox("4");
cb->ShowWindow(SW_HIDE);
//MessageBox("4");
}
}
代码执行到b->ButtonNum = n无响应退出程序:TestComm.exe 中的 0x01389882 处未处理的异常: 0xC0000005: 写入位置 0x000000e0 时发生访问冲突
请问各位这是什么问题?我要实现我的功能有没有其他的方法?谢谢各位!
------解决方案--------------------
b->ButtonNum = n;//b没有被初始化
------解决方案--------------------
B *b;
没有new,也不是活得对话框对象的地址,当然要崩溃了
------解决方案--------------------
指针和实体要区分
B b;
b.ButtonNum = n;
要么这么玩
------解决方案--------------------
指针和实体要区分
B b;
b.ButtonNum = n;
要么这么玩
------解决方案--------------------
B *b;//这里没有初始化,肯定挂
在A窗口中要更新B窗口的控件。
可先将B窗口的指针传给A,
再在A中通过指针访问(且要确保B窗口对象已经创建,并且没有消毁)!
------解决方案--------------------
B *b;
没有初始化,
------解决方案--------------------
B *b;指针没有初始化,0xC0000005在很多情况下就是访问了一个空指针,并对这个指针进行操作引发的。
------解决方案--------------------
CButton *cb;
改为
CButton *cb = new CButton();
///////////////////////////
你通过对变量监视,就会很明显发现这个问题,