求真正的MFC高手!!!!!!!子窗口函数在主窗口运行问题
CShangweijiDlg是主窗口类,CChaKanDlg是新建的一个窗口类,ChaKanList_Init()是CChaKanDlg中的一个函数voidCChaKan...
CShangweijiDlg是主窗口类, CChaKanDlg是新建的一个窗口类,ChaKanList_Init()是CChaKanDlg中的一个函数
void CChaKanDlg::ChaKanList_Init()
{
//设置格式
m_ChaKanList.ModifyStyle( 0, LVS_REPORT ); // 报表模式
m_ChaKanList.SetExtendedStyle(m_ChaKanList.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); // 间隔线+行选中
//插入表头
m_ChaKanList.InsertColumn(0,"房间号");
m_ChaKanList.InsertColumn(1,"报警种类");
m_ChaKanList.InsertColumn(2,"报警时间");
////设置列宽
CRect rect;
m_ChaKanList.GetClientRect(rect); //获得当前客户区信息
m_ChaKanList.SetColumnWidth(0, rect.Width() / 6); //设置列的宽度。
m_ChaKanList.SetColumnWidth(1, rect.Width() / 3);
m_ChaKanList.SetColumnWidth(2, rect.Width() / 2);
}
下面代码是在主窗口类的一个函数里面,弹出CChaKanDlg窗口,但弹出前先调用ChaKanDlg.ChaKanList_Init();对子窗口上得列表进行初始化。
void CShangweijiDlg::OnChaKan()
{
// TODO: Add your command handler code here
CChaKanDlg ChaKanDlg;
ChaKanDlg.ChaKanList_Init();
ChaKanDlg.DoModal();
}
我也试过在主窗口的OnInitDlg函数加上
CChaKanDlg ChaKanDlg;
//ChaKanDlg.DoModal();
ChaKanDlg.ChaKanList_Init();
可以通过,但一运行就崩溃 展开
void CChaKanDlg::ChaKanList_Init()
{
//设置格式
m_ChaKanList.ModifyStyle( 0, LVS_REPORT ); // 报表模式
m_ChaKanList.SetExtendedStyle(m_ChaKanList.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); // 间隔线+行选中
//插入表头
m_ChaKanList.InsertColumn(0,"房间号");
m_ChaKanList.InsertColumn(1,"报警种类");
m_ChaKanList.InsertColumn(2,"报警时间");
////设置列宽
CRect rect;
m_ChaKanList.GetClientRect(rect); //获得当前客户区信息
m_ChaKanList.SetColumnWidth(0, rect.Width() / 6); //设置列的宽度。
m_ChaKanList.SetColumnWidth(1, rect.Width() / 3);
m_ChaKanList.SetColumnWidth(2, rect.Width() / 2);
}
下面代码是在主窗口类的一个函数里面,弹出CChaKanDlg窗口,但弹出前先调用ChaKanDlg.ChaKanList_Init();对子窗口上得列表进行初始化。
void CShangweijiDlg::OnChaKan()
{
// TODO: Add your command handler code here
CChaKanDlg ChaKanDlg;
ChaKanDlg.ChaKanList_Init();
ChaKanDlg.DoModal();
}
我也试过在主窗口的OnInitDlg函数加上
CChaKanDlg ChaKanDlg;
//ChaKanDlg.DoModal();
ChaKanDlg.ChaKanList_Init();
可以通过,但一运行就崩溃 展开
展开全部
在Dialog实际初始化之前,其中的控件都是不存在的。
所以
ChaKanDlg.ChaKanList_Init();
ChaKanDlg.DoModal();
在DoModal之前初始化控件肯定是不会成功的。而在DoModal返回之后,窗口已经销毁,再去操作其控件也是不合法的。
改变初始化方法吧,在窗口类中去初始化,而不是在外部。
所以
ChaKanDlg.ChaKanList_Init();
ChaKanDlg.DoModal();
在DoModal之前初始化控件肯定是不会成功的。而在DoModal返回之后,窗口已经销毁,再去操作其控件也是不合法的。
改变初始化方法吧,在窗口类中去初始化,而不是在外部。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CChaKanDlg ChaKanDlg;
//ChaKanDlg.DoModal();
ChaKanDlg.ChaKanList_Init();
CChaKanDlg ChaKanDlg;构建了了一个窗口对象,但是窗口并没有创建,
ChaKanDlg.ChaKanList_Init();没有创建窗口,就开始初始化窗口里面的控件,这时候还没有控件。所以会崩溃
//ChaKanDlg.DoModal();
ChaKanDlg.ChaKanList_Init();
CChaKanDlg ChaKanDlg;构建了了一个窗口对象,但是窗口并没有创建,
ChaKanDlg.ChaKanList_Init();没有创建窗口,就开始初始化窗口里面的控件,这时候还没有控件。所以会崩溃
追问
那该怎么办呢?能否具体点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接在ChaKanDlg的OnInitDialog里面调用ChaKanList_Init()不就好了,这个最简单。
或者,使用非模态对话框,Create之后调用ChaKanList_Init,然后在ShowWindow也可以。
或者,使用非模态对话框,Create之后调用ChaKanList_Init,然后在ShowWindow也可以。
追问
不好意思,ChaKanDlg是没有OnInitDialog函数的,我建立的是基本对话框类型,我采用非模态对话框试了一下
CChaKanDlg ChaKanDlg;
ChaKanDlg.Create(IDD_ChaKanDlg,this);
ChaKanDlg.ChaKanList_Init();
ChaKanDlg.ShowWindow(SW_SHOW);
发现要显示的对话框好像闪了一下,便消失了。。。无法看到结果
追答
非模态肯定是可以的,你检查自己的代码吧
关于模态,OnInitDialog是对话框基本的消息响应函数,没有可以建好吧。。。怎么会没有呢。。WIN32 SDK的对话框也可以响应这个好吧。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询