WEB开发网
开发学院软件开发VC MFC教程(5)-- MFC对象的创建(2) 阅读

MFC教程(5)-- MFC对象的创建(2)

 2010-03-25 20:33:44 来源:WEB开发网   
核心提示:创建上下文结构的定义:struct CCreateContext{CRuntimeClass* m_pNewViewClass; //View的动态创建信息CDocument*m_pCurrentDoc;//指向一文档对象,将和新创建视关联//用来创建MDI子窗口的信息(C MDIChildFrame::LoadFra

创建上下文结构的定义:

struct CCreateContext

{

CRuntimeClass* m_pNewViewClass; //View的动态创建信息

CDocument*m_pCurrentDoc;//指向一文档对象,将和新创建视关联

//用来创建MDI子窗口的信息(C MDIChildFrame::LoadFrame使用)

CDocTemplate* m_pNewDocTemplate;

// for sharing view/frame state from the original view/frame

CView* m_pLastView;

CFrameWnd* m_pCurrentFrame;

};

这里,传递给LoadFrame的CCreateContext变量是:

(视的动态创建信息,新创建的文档对象,当前文档模板,NULL,NULL)。

其中,“新创建的文档对象”就是图 5-8中创建的那个文档对象。从此图中还可以看到,LoadFrame被CreateNewFrame调用,CreateNewFrame是文档模板的成员函数,被文档模板的成员函数OpenDocumentFile所调用,所以,LoadFrame间接地被文档模板调用,“当前文档模板”就是调用它的模板对象。顺便指出,对SDI程序来说是这样的,对MDI程序有所不同。“视的动态创建信息”也是文档模板传递过来的。

对图5-11的说明:

在创建边框窗口之前,先注册“窗口类”。LoadFrame注册了两个“窗口类”,一个为边框窗口,一个为视窗口。关于“窗口类”注册,见2.2.1节。

注册窗口类之后,创建边框窗口,并加载资源。创建边框窗口使用了CFrameWnd的Create虚拟函数,最终调用::CreateEx创建窗口。::CreateEx有11个参数,其最后一个参数就是文档模板传递给LoadFrame的CCreateContext类型的指针,该指针将被传递给窗口过程,进一步由Windows传递给OnCreate函数。顺便指出,创建完毕的边框窗口的窗口过程是统一的MFC窗口过程。

创建边框窗口时,发送消息WM_NCCREATE和WM_CREATE,导致对应的消息处理函数OnNcCreate和OnCreate被调用。CWnd提供了OnNcCreate处理非客户区创建消息,CFrameWnd没有处理该消息,但是提供了OnCreate处理消息WM_CREATE。OnCreate将创建视对象和视窗口。

CFrameWnd::OnCreate

按创建工作的进度,现在要讨论边框窗口创建消息(WM_CREATE)的处理了,处理函数是CFrameWnd的OnCreate,其原型如下:

int CFrameWnd::OnCreate(LPCREATESTRUCT lpcs)

其中,参数指向一个CreateStruct结构(关于CreateStruct的描述见4.4.1节),它包含了窗口创建参数的副本,也就是说CreaeEx窗口创建函数的11个参数被对应地复制到该结构的11个域,例如它的第一个成员就可以转换成CCreateContext类型的指针。

函数OnCreate处理WM_CREATE消息,它从lpcs指向的结构中分离出lpCreateParams并把它转换成为CCreateContext类型的指针pContext,然后,调用OnCreateHelp(lpcs,pContext),把创建工作委派给它完成。

CFrameWnd::OnCreateHelp的原型如下,流程见图5-11。

int CFrameWnd::OnCreateHelp(LPCREATESTRUCT lpcs,

CCreateContext* pContext)

上一页  1 2 3 4 5 6 7  下一页

Tags:MFC 教程 MFC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接