概念问题,悬赏80!

hithcliff 2000-04-06 07:51:00
我想用SDI框架做多视的程序,按理说不难,但我想做多个CFormView,而CFormView 居然
连构造函数,西够函数,Create 都是保护的!所以我强行把他们改公有,因为我是在
CMainFrame中用new生成的。而在delete时却发生了错误,(我是在~CMainFrame()中delete的),提示是acess violent.请高手指点!
...全文
181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
JJONY 2000-04-07
  • 打赏
  • 举报
回复
哈哈,想做多视图吗?
你上面的做法我可这样做过,但起码可以说是不地道生成多视的方法。
没错!当你用CFormView类时,系统给你生成类的构造函数是protected的,这么说这个类一般不是在应用程序里用new生成实例的。
还记得Doc - View框架吧!Doc和View两个类的构造函数也不就是protected的!
所以CFormView类实例的创建是MFC独有的所谓“动态创建”方式来创建的。至于清除的操作你就不用管啦,把这个概念搞懂后,可以看看下面的代码:
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CNewSDIDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CNewSDIView));
上面的代码就是“动态创建”实例的过程。(* RUNTIME_CLASS(CNewSDIView) *)
好,下面就是多视的创建过程,也是一种“动态创建”方法:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
m_wndSplitter.CreateStatic(this,1,3);
m_wndSplitter.CreateView(0,2,RUNTIME_CLASS(CTreeList),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CEditForm),CSize(rect.Width()/3,0),pContext);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyTreeView),CSize(rect.Width()/3,0),pContext);

SetActiveView((CView*)m_wndSplitter.GetPane(0,0));
return TRUE;//CFrameWnd::OnCreateClient(lpcs, pContext);如果return CFrameWnd::OnCreateClient(lpcs, pContext);你的多视创建就白干了
}
在CMainFrame类中有一个叫CSplitterWnd类的成员变量:m_wndSplitter,它是专门用来维护多视图的一个类。
CTreeList,CEditView 就是CFormView的派生类。CMyTreeView就是CTreeView的派生类。至于详细的操作就请眼MSDN啦,我有一个多视图的程序发一个给你吧。
xielm 2000-04-07
  • 打赏
  • 举报
回复
从 CFormView 派生 CMyFormView ,重载下面的函数,外部不必delete
void CMyFormView ::PostNcDestroy()
{
// Free the C++ class.
delete this;
}
Sniper 2000-04-06
  • 打赏
  • 举报
回复
似乎不能在~CMainFrame()中delete,你可以试试在CMainFrame::OnDestory()中作。
梁小白 2000-04-06
  • 打赏
  • 举报
回复
为何不派生CFormView?
kitty 2000-04-06
  • 打赏
  • 举报
回复
你可以试试在应用类中生成和删除它们!

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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