我做了一个Config的程序,其功能是配制我的应用系统的参数。其中有一个对象,是我自己定义的从CPropertySheet派生出来的类:在Control.CPP中
CAllControlsSheet allcontrolsheet;
mpMainWnd = &allcontrolsheet;
allcontrolssheet.DoModal();
在AllcontrlsSheet.CPP中
CAllControlsSheet : pulic CpropertySheet
{public:
CAPage m_APage;
CBPage m_BPage;
CCPage m_CPage;
.......... 一共十个页。
}在这个类的构造函数中,将所有的页PAGE加入到该SHEET中:
CAllControlsSheet : CAllControlsSheet()
{
AddPage(m_APage);
AddPage(m_BPage);
AddPage(m_CPage);
..........
}该类中有个涵数负责把一个二进制配置文件读入内存,并且确定每个页面上的各种控件的初始值,并且有个涵数负责把各个控制件的设定值转换回内存,并且把这个2K的内存结构,写入数据文件。现在问题出在这个把控件转换成内存结构的过程中,我用
m-APage.UpdateData();
m_BPage.UpdateData();
m_CPage.UpdateData();
.......
来进行控件和控件的变量的数据更新,每每运行在此,总在这个位置上出错。用DEBUG看,在MFC\SRC\WINCORE.CPP上的这个地方:
BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
{
ASSERT(::IsWindow(m_hWnd))
上出现错误信息,而m_hWnd总是为零的。而且第一个
m_APage.UpdateData()常常不出错,就是第二个开始有问题,请大家看看我的这个令人头痛的问题,是不是该象楼下的那位重装VC?谢谢你的阅读!
CAllControlsSheet allcontrolsheet;
mpMainWnd = &allcontrolsheet;
allcontrolssheet.DoModal();
在AllcontrlsSheet.CPP中
CAllControlsSheet : pulic CpropertySheet
{public:
CAPage m_APage;
CBPage m_BPage;
CCPage m_CPage;
.......... 一共十个页。
}在这个类的构造函数中,将所有的页PAGE加入到该SHEET中:
CAllControlsSheet : CAllControlsSheet()
{
AddPage(m_APage);
AddPage(m_BPage);
AddPage(m_CPage);
..........
}该类中有个涵数负责把一个二进制配置文件读入内存,并且确定每个页面上的各种控件的初始值,并且有个涵数负责把各个控制件的设定值转换回内存,并且把这个2K的内存结构,写入数据文件。现在问题出在这个把控件转换成内存结构的过程中,我用
m-APage.UpdateData();
m_BPage.UpdateData();
m_CPage.UpdateData();
.......
来进行控件和控件的变量的数据更新,每每运行在此,总在这个位置上出错。用DEBUG看,在MFC\SRC\WINCORE.CPP上的这个地方:
BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
{
ASSERT(::IsWindow(m_hWnd))
上出现错误信息,而m_hWnd总是为零的。而且第一个
m_APage.UpdateData()常常不出错,就是第二个开始有问题,请大家看看我的这个令人头痛的问题,是不是该象楼下的那位重装VC?谢谢你的阅读!
解决方案 »
- 游戏截图的问题,在线等高手。。。
- 怎么把列表框的内容显示在编辑框
- 大家能否帮我看看程序的问题,编译时能输出结果,但是会崩溃,谢谢
- CRichEditCtrl导入文本以后是全选状态,会是什么原因?
- 初学者:ActiveX 的问题
- 高分请教:如何把数据库中binary类型得一条记录转化为一条SQL语句,使其能插入其它数据表
- m_strSettings = _T("9600,n,8,1");请问_T的作用是什么?
- 当打印机开始打印WORD文档时,用哪个函数可以获得打印文档的页数和名称。谢谢!
- 求求各位,如何取字符的第一位?
- 两个HOOK问题和一个键盘问题
- 请教 google 搜索的问题!
- 怎么指定机器的其中一个ip地址对外连接?
我认为,你最好不要在构造函数种调用,因为在构造函数中CAllControlsSheet 的窗口还未产生,而属性页的父窗口就是属性表,当然会出现无效的窗口句柄呀!
建议你在CAllControlsSheet 的InitDialog函数中如下调用
{
m-APage.UpdateData();
m_BPage.UpdateData();
m_CPage.UpdateData();
.
.
.
//此处读配置文件
//不要调用每个属性页的UpdateData()函数
}在每个属性页的InitDialog函数中调用UpdateData(),试试看看如何
{
m-APage.UpdateData();
m_BPage.UpdateData();
m_CPage.UpdateData();
.
.
.
//此处读配置文件
//不要调用每个属性页的UpdateData()函数
}
错了将
m-APage.UpdateData();.....
都改为
AddPage(...)
UpdateDate(FALSE)
pSheet->Create();//NULL,WS_MINIMIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX);
//pSheet->m_hWnd = ::AfxGetApp()->GetMainWnd()->GetSafeHwnd();
m_pMainWnd = pSheet;
((CSheet *)pSheet)->SetActivePage(&((CSheet *)pSheet)->m_page2);
((CSheet *)pSheet)->SetActivePage(&((CSheet *)pSheet)->m_page1);
pSheet->ShowWindow(SW_SHOW);
return TRUE;
InitInstance中
我的程序放在
InitInstance中
我的做法是静态产生的,依照你的方法!我用SetActivePage去依此激活一遍,好象没有什么用!头痛呀!
SetActivePage(m_BPage);
SetActivePage(m_CPage);给你加分!