1.
在
main
或WinMain之前,全局变量(对象)已经被分配内存并初始化了。
2.
在
MFC
中在WinMain之前有个 theApp全局变量先被构造并被初始化,而由于子类构造函数执行前,其父类的构造函数先被执行,所以 CTestApp的父类CWinAPP 的构造函数先执行。产生了 theApp对象后,在WinMain()中的指针 *pThread和*pApp 就有了内容。
知识点:
Afx前缀的函数代表应用程序框架 (Application Framework)函数,都是全局函数,在程序的任何地方都可以调用它。
3.MFC
大致流程:
CTestApp theApp;//
构造全局对象
WinMain()
{
AfxWinMain();//
调用下面的函数
}
AfxWinMain()
{
pThread->Initinstance();//
初始化工作和注册窗口类,窗口显示和更新
pThread->Run();//
消息循环
}
而在
BOOL CTestApp::InitInstance()中的代码
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);
完成了将这三个类关联起来的工作。
4.
如何在单文档文件中显示一个
CButton的对象?
在
CMainFrame::OnCreate()
中定义一个
CButton的对象btn; 然后调用 btn.Create("维新",WS_DISABLED |WS_CHILD | WS_VISIBLE | BS_AUTO3STATE,
CRect(0,0,300,100),/*GetParent(),*/this,123);
注意点:
(1).
此处btn不能是局部变量,否则它的生命周期太短,将不能显示。
(2).
在create函数的第二个参数中加入 WS_VISIBLE 参数才行。否则必须调用 ShowWindow
也可以在
view的OnCreate 消息响应函数中加入
(3).CButton
类的定义头文件在 afxwin.h中,而stdafx.h 包含了afxwin.h,所以可以直接使用。因为 MFC中的每一个类中都有#include "stdafx.h"的声明。
5
一个单文档窗口(多文档),标题栏和菜单栏位于 MainFrame的非客户区,而工具栏位于 MainFrame的客户区。而视图位于MainFrame的客户区。