关于MFC框架的一点理解和疑问。

shiloh0407 2005-12-19 03:31:34
我是一个刚刚入门的VC学生,我这个人学什么东西都爱追根问底,力求得到最圆满和深刻的理解,而事实上往往事与愿违。下面是我对MFC的框架的一点点理解,请大家给予指正,不胜感觉。

总体上来看,我觉得一个MFC的应用程序创建过程主要有两大步,首先是创建应用程序框架:CMyWinApp(这里我用My来指具体的用户创建的应用程序名称)以及其父类CWinApp CWinThread 和CCmdTarget CObject. 然后是创建窗口框架: CMyFrameWnd(泛指用户窗口类) CFrameWnd 和CWnd 然后又来到CCmdTarget 和CObject.也就是说CCmdTarget 和 CObject这两个类是被公用的,它们俩统一管理应用程序框架和窗口框架的创建. (一个负责维护应用程序,另一个负责管理命令响应????)
一个MFC的应用程序从一个全局变量theApp进入->由于CMyWinApp theApp->CMyWinApp 构造函数的调用->CWinApp构造函数的调用->CWinThread构造函数调用->CCmdTarget构造函数调用->CObject构造函数调用.到此该程序的应用程序框架部分已经被创建完成了.
然后进入WinMain()->保存指向该应用程序的一个CWinApp* 的指针->InitApplication() (我不清楚该函数内部到底做了些什么,以及为什么该函数是个虚函数? 后面别的继承类可以改写它么???) ->InitInstance() (从这里开始进行窗口框架的创建)->new CMyFrameWnd 并把指向它的指针保存到一个CWnd* 类型的指针中去了->引发CMyFrameWnd构造函数调用->CFrameWnd构造->CWnd构造->CCmdTarget构造函数调用->CObject构造函数调用.到此窗口框架部分已经创建起来了. 还没有完 然后->CMyFrameWnd构造函数中有Create() (我不清楚这个Create是CWnd的Create还是CFrameWnd的??? 书上说是CFrameWnd的,是不是CFrameWnd从CWnd继承来的一个virtual Create,然后改写了??? why???)
->Create中的CreateEx()->CreateEx中的PreCreateWindow(),由于PreCreateWindow是virtual,所以->
调用的是CFrameWnd::PreCreateWindow(). 到此应用程序的窗口框架已经创建好了.
然后继续执行WinMain()中的Run()方法->由于Run是virtual,所以调用的是CWinApp::Run()->由于CWinApp::Run()返回值调用了CWinThread::Run(),所以->CWinThread::Run(),消息循环.

疑问:
CWinThread::的InitInstance()干了什么?
CreateEx()并不是虚的?
其中Create()的调用,调用的是CWnd 的还是CFrameWnd的?还是CFrameWnd从CWnd中继承来得? (继承来的也需要再次声明么???)
请问我这里说的对不对阿? 哪位能把我不明白和不对的地方指出来呢?? ? 不胜感觉!!!

...全文
285 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingpf 2005-12-22
  • 打赏
  • 举报
回复
继承来的不需要再声明了。

用F11进所有函数?夸张了吧,转得头晕脑涨,还有很多东东搞不明白
__________________ 2005-12-22
  • 打赏
  • 举报
回复
搬个凳子。学...
xx_jj 2005-12-22
  • 打赏
  • 举报
回复
看看深入浅出吧
或者学习sdk
wshcdr 2005-12-19
  • 打赏
  • 举报
回复
CWinThread::的InitInstance()干了什么?


这里一般是创建窗口,显示窗口
shiloh0407 2005-12-19
  • 打赏
  • 举报
回复
为什么不要研究MFC的结构呢? 我觉得来龙去脉了解的清楚了这样很好啊,我觉得这样的话不容易忘记,不然只要一段时间不使用VC,就都忘记了,我就深有体会.我现声明一下阿,我不是学计算机的,所以不可能总是摆弄VC,只是需要的时候拿来用一下.
shiloh0407 2005-12-19
  • 打赏
  • 举报
回复
没有回答啊,继承来的还需要再次声明么?
mqmelon 2005-12-19
  • 打赏
  • 举报
回复
看看,侯捷的,深入浅出MFC
同意。里面写得很清楚。
skyphantom 2005-12-19
  • 打赏
  • 举报
回复
看看,侯捷的,深入浅出MFC
Seu_why 2005-12-19
  • 打赏
  • 举报
回复
古董级框架--->>学习MFC的思想也很重要啊
边学习MFC边补补C++吧
__________________ 2005-12-19
  • 打赏
  • 举报
回复
根本就没有必要弄明白什么mfc(都是古董级框架了。还研究它。用就行了。)
正经八百的写一个Win32窗口程序。什么都齐了。
MFC中不明白了。我有两大高招:
1.用F11。进所有函数。
2.响应所有事件。在所有事件函数中OutputDebugString就知道。它都在什么时候都干了什么了。

引用:"继承来的也需要再次声明么"
感觉你c++还没有学好。建议不要动c++以外的任何东西。不然的话.....哈~哈~哈~~~~~。
shiloh0407 2005-12-19
  • 打赏
  • 举报
回复
怎么没有人回复啊???很着急,在线等! 为了我的进步,大家辛苦了

16,551

社区成员

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

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

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