Visual C++ 6.0技术内幕笔记(二)
第一部分 Windows、Visual C++ 和应用程序基础框架
第二章 Microsoft 基本类库应用程序框架
示例
(hello)
程序的生与死
1. 部分出示化工作
2. 构造应用程序的唯一应用类对象(CMyApp)
3. 调用WinMain函数,该函数隐藏于应用程序框架之内
4. WinMain寻找唯一应用类对象
5. WinMain调用应用类对象InitInstance函数
6. InitInstance函数调用所需要的构造,显示应用程序主框架(CMainWindow)
7. WinMain调用Run函数运行消息循环
8. 主框架函数析构(~CMainWindow)
9. 从Run函数中退出
10. 从WinMain函数中退出
11. 唯一应用类对象析构(~CMyApp)
//文件:Hello.h
class CMyApp : public CWinApp //主程序
{
public:
virtual BOOL InitInstance (); //virtual关键字属于语法范畴,还没有学习到。暂时不必在意
};
class CMainWindow : public CFrameWnd //主框架窗口
{
public:
CMainWindow ();
protected:
afx_msg void OnPaint (); //事件
DECLARE_MESSAGE_MAP () //消息映射
};
//文件:Hello.cpp
#include <afxwin.h>
#include "Hello.h"
CMyApp myApp; //定义全局变量
BOOL CMyApp::InitInstance () //调用构造初始化主框架
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow (m_nCmdShow);
m_pMainWnd->UpdateWindow ();
return TRUE;
}
BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) //消息宏
ON_WM_PAINT ()
END_MESSAGE_MAP ()
CMainWindow::CMainWindow () //在构造函数中为窗体加入标题
{
Create (NULL, _T ("Hello程序"));
}
void CMainWindow::OnPaint () //实现打印
{
CPaintDC dc (this);
dc.TextOut(0,0,"Hello,world!");
}
-----------------------------------翻译部分,英语很烂。自己能理解就行了--------------------------------
这里是MSDN中部分关于CwinApp的函数说明
Windows应用程序对象为初始化和运行具体的应用程序提供众多成员函数,而CWinApp类是Windows应用程序对象的基类。
每一个以MFC为基础的应用程序只能包含一个CwinApp对象。该对象被建立与C++全局变量建立之时以支持MFC库,而后Windows调用WinMain函数。该对象亦声明为全局变量。
当你从CWinApp继承一个类时,重写InitInstance函数以建立主窗体对象。
这里是MSDN中部分关于InitInstance的说明
应用程序初始化概念地可分为两个情况:WinMain函数调用该函数,程序第一次运行时应用程序初始化。程序多次启动时一个副本的初始化。
在windows中,重写InitInstance以初始化每个新的应用程序实例。代表性的,重写InitInstance以实例化主窗口对象和设置CWinThread::m_pMainWnd数据成员以指向窗口。
这里是MSDN中部分关于CFrameWnd的函数说明
CFrameWnd类提供与SDI窗体交互的功能,提供成员以管理窗体。
有三种方法构建一个框架窗口
直接以Create构建
直接以LoadFrame构建
间接以文档模板构建
这里是MSDN中部分关于DECLARE_MESSAGE_MAP的函数说明
在类结尾部分声明 DECLARE_MESSAGE_MAP
宏。然后在.cpp文件为类定义成员函数,用BEGIN_MESSAGE_MAP宏链接每一个消息句柄函数然以END_MESSAGE_MAP宏结束。
注意:如果你在DECLARE_MESSAGE_MAP后声明任何成员,你必须为它们详细指定一个修饰符(public,private,or protected)。
----------------------------------------------------------------------------------------------------------
文档和视图 大部分MFC程序基于文档视图结构,数据与数据的用户视图分开。同一组数据也可以有多个视图(如股票价格可以有表格视图和图表视图)。
备注:建立时选择Win32项目-代码输入后选择-在共享 DLL 中使用 MFC,否则程序无法运行。