如何动态创建一个继承自CFormView的实例?

Garfield 2006-08-08 10:45:43
以前用vc7的时候我是把继承的构造函数和释构函数放到public
然后再重写Create函数把它声明为Public,那就可以正常Create了
但是用了VC8以后,这样会出错:

===============================================================================
Windows 已在 BLUEClient.exe 中触发一个断点。

其原因可能是堆被损坏,这也说明 xxxxxx.exe 中或它所加载的任何 DLL 中有 bug。

输出窗口可能提供了更多诊断信息
===============================================================================
输出窗口写着:

Warning: Creating a pane with no CDocument.
HEAP[xxxxxx.exe]: Invalid Address specified to RtlValidateHeap( 00390000, 0039CE58 )
Windows 已在 xxxxxx.exe 中触发一个断点。

其原因可能是堆被损坏,这也说明 xxxxxx.exe 中或它所加载的任何 DLL 中有 bug。

输出窗口可能提供了更多诊断信息


-------------------------------------------------------------------------------

后来不用改public的方式,用这种方式动态创建

CRuntimeClass *p = RUNTIME_CLASS(CConsoleForm);
CObject *o = p->CreateObject();
ASSERT( o->IsKindOf( RUNTIME_CLASS( CConsoleForm ) ) );

CConsoleForm *myfrm = (CConsoleForm*)o;

但是最后得出来的
o = 0x0039cda0 {CConsoleForm hWnd=0x00000000}, 好像并没有创建到窗口。。只是把类实例了
myfrm 之后的ShowWindow什么的都会出错。



应该怎样才能正确创建?
...全文
843 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Garfield 2006-08-09
  • 打赏
  • 举报
回复
我还是直接问VC8下面怎样做一个CFormView的SDI程序好了
不用到文档的,只是一个SDI主框架+一个CFormView
Garfield 2006-08-08
  • 打赏
  • 举报
回复
直接用 o->Create 吗
思危 2006-08-08
  • 打赏
  • 举报
回复
如果是在框架窗口中他还有一个 CreateView 函数
思危 2006-08-08
  • 打赏
  • 举报
回复
Create 是 CWnd的 是 public 的
Garfield 2006-08-08
  • 打赏
  • 举报
回复
但是Create默认是protected的函数,不能访问啊
思危 2006-08-08
  • 打赏
  • 举报
回复
创建了CConsoleForm对象之后,还要用 Create 来创建窗口,
否则当然不能进行任何与窗口有关的操作。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧