关于MFC的运行机制中的窗口注册的问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 10:54:26
我知道程序怎么从theapp对象 到winmain 到消息循环 我都知道
但就是窗口的注册我不知道哪调用的?谁调用的
窗口注册类的函数我知道
AfxEndDeferRegisterClass()
但是我不知道这个函数是谁调用的
比如我新建一个MFC的单文档
程序的运行是不是这样的啊?先是 全局的对象的产生就是theapp 然后进入CWinApp的构造函数在构造函数中初始化一些变量 然后进入进程入口函数winmain 在afxwinmain中进行一些操作 包括其中的afxwinlnit来初始化框架和消息循环 然后在initinstance中进行产生窗口 然后我就不知道了 这一句在哪出现的啊CWnd* pWnd= new CWnd pWnd->Create() -> CreateEx ->PreCreateWindow();

theapp 是应用线程,winmain是进程入口。这些是管理资源消息循环等的。跟窗口创建没关系

窗口的创建过程
CWnd* pWnd= new CWnd
pWnd->Create() -> CreateEx ->PreCreateWindow();
PreCreateWindow 里面调 AfxDeferRegisterClass 来执行注册。
AfxDeferRegisterClass 又调用了 AfxEndDeferRegisterClass;
当然MFC的控件类字符串都是在里面预定义的,所以AfxDeferRegisterClass 的参数都是预定义宏。

如果自己定义的窗口(并不是简单的对CButton,CStatic等控件的扩展,那些一般只是覆盖了窗口的消息处理函数,窗口类并没有变),必须自己手动注册了,才能Create

高手!学了这么多年!我连门都没入!请指教!