永发信息网

在Visual C++设计中,单文档应用程序中常用的MFC类如何相互获得类的指针?(如CView类获得CDoc类的指针等

答案:4  悬赏:0  手机版
解决时间 2021-12-23 23:16
不要回答的长篇大论,150——300字就行了,这是我考试题的简答题。谢谢谢谢
最佳答案
前人在CSDN总结的,曾经帮助过我,整理总结一下,希望也能帮助一下别人。

获得CWinApp
获得CMainFrame
获得CChildFrame
获得CDocument
获得CView

在CWinApp中
AfxGetMainWnd()

m_pMainWnd
AfxGetMainWnd()->MDIGetActive()

AfxGetMainWnd()->GetActiveFrame()
SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()

MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
SDI:AfxGetMainWnd()->GetActiveView()
MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()
在CMainFrame中 AfxGetApp()

theApp
MDIGetActive()

GetActiveFrame()
SDI:GetActiveView()->GetDocument()
MDI:MDIGetActive()->GetActiveView()->GetDocument() SDI:GetActiveView()
MDI:MDIGetActive()->GetActiveView()
在CChildFrame中 AfxGetApp()

theApp
GetParentFrame()
GetActiveView()->GetDocument() GetActiveView()
在CDocument中 AfxGetApp()

theApp
AfxGetMainWnd() AfxGetMainWnd()->MDIGetActive()

AfxGetMainWnd()->GetActiveFrame()
POSITION pos = GetFirstViewPosition();GetNextView(pos)
在CView中 AfxGetApp()

theApp
AfxGetMainWnd() GetParentFrame() GetDocument()
在其他类中 AfxGetApp()
AfxGetMainWnd() AfxGetMainWnd()->MDIGetActive()

AfxGetMainWnd()->GetActiveFrame()
SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()

MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
SDI:AfxGetMainWnd()->GetActiveView()
MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()

理一理MFC的这几个类的关系,可以很容易明白上面的这些乱七八糟的逻辑。
App是应用域,所有的域中的东西都可以通过全局函数访问到它。
MainFrame是主框架,也基本可以用全局函数访问到。
MainFrame下是若干个ChildFrame,ChildFrame中若干个View和Document(可能不成对),ChildFrame管理着View,View和Document进行互操作。
因此整体框架就出来了,一般除了直接应用的关系都可以通过MainFrame-->Active ChildFrame-->Active View-->Document这条线进行访问,这应该叫什么来自?万能方法吧^_^。
恕我懒惰,不愿意画一个更详细的图解,凑合着看看吧。
全部回答
把左边的窗口切换到类视图,选中你的文档类,在最右边的属性面板里找重写,找到onopendocument,选择重写就添加上了
使用BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ); 函数,详见: ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/dllproc/base/createprocess.htm
我擦,这么简单的你都不会,你怎么考试啊 常用的就是CxxxxView,CMainFrame,CxxxxApp,CxxxxDocument这四个类呗 在CMainFrame中可以用GetActiveView(),AfxGetApp(),GetActiveDocument()得到另外三个; 在CxxxxView中可以用GetParent(),GetDocument(),AfxGetApp()得到另外三个; 在CxxxxApp中可以用AfxGetMainWnd()得到CMainFrame 的指针,然后得到另外两个的方法同CMainFrame中的情况; 在CxxxxDocument()中用跟CxxxxApp的一样,也是AfxGetMainWnd()得到CMainFrame 的指针,然后利用这个指针来获得别的类的指针,不过其中用的比较多的是前两个类 中的互相获取,后两个类中基本不获取别的类的指针。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我是商家,我该怎么回复它,我这边的食材都是
防晒喷雾什么牌子好,哪个国家的啊?
单选题Tom failed ______ the&nbs
迷你世界方块复制器怎么用 50分
霍山县城市管理行政执法大队三中队地址有知道
星际战甲地挖出什么
能帮我做份医疗跟重疾保险计划吗?
大度读人冯骥才一个人就是一本书。阅读答案
给排水是什么意思
选文:阅读答案
霍山县城市管理行政执法局黑石渡中队地址有知
11款朗逸仪表怎么拆
尖属于什么造字法
小车在高速上噗噗噗的响是什么原因
霍山县城市管理行政执法局规划执法中队办公地
推荐资讯
为什么美国人可以说好日语 而日本人说不好英
京东的用户名和密码都忘了 如何找回
物理知识在生产和生活中有着广泛的应用.在图
朋友可以比喻成什么成语
紫外(UV)吸收测COD能通过验收吗
东阳邮箱号多少
普宁职业技术学校怎么样
人死了会记得自己的亲人吗
单选题关于导体和绝缘体,下列说法正确的是A.
任务型阅读:阅读下面的对话,并回答问题Kang
单选题1967年,欧洲六国正式成立欧洲共同体。
单选题互联网独特的魅力,使越来越多的家庭接
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?