【MFC Windows程序设计(第二版)】第一章代码注释。

来源:互联网 发布:网络升级访问紧急通知 编辑:程序博客网 时间:2024/05/22 08:18

/*CMyApp继承了CWinApp类,因此它就是应用程序对象。CWinApp类提供消息循环和调度。一个MFC应用程序可以有且仅有一个应用程序对象。此对象必须在全局声明内有效。*/class CMyApp:public CWinApp{public:virtual BOOL InitInstance();/* 上面这个函数是从CWinApp覆盖的,CWinApp本身具有这个函数,我们的类在此继承了这个函数 */};class CMainWindow: public CFrameWnd{public:CMainWindow();protected:afx_msg void OnPaint();DECLARE_MESSAGE_MAP ();};

Hello.h ↑


Hello.cpp↓:





#include <afxwin.h>#include "Hello.h"CMyApp myApp;//看到了么,结合头文件的注释/*myApp就是CMyApp的实例,而这个实例必须是全局范围内有效的,因此我们声明其为全局变量。*/BOOL CMyApp::InitInstance(){/* 这个函数就是刚才提到的,从CWinApp继承过来的函数的具体实现。虚函数(Virtual function)。请注意!这个函数是CWinApp自身拥有的,由于继承关系,CMyApp才有了这个函数。这个函数的调用非常之早,是在应用程序开始之后而窗口被创建之前,可以看到,下面的操作全是窗口操作。Pdf 16,Page 35/1187事实上,除非InitInstance创建一个窗口,否则应用程序是不会创建窗口的。这就是为什么就算是最小的MFC应用程序也必须从CWinApp类派生出一个类并覆盖CWinApp::InitInstance()这个函数。在CWinApp(不是这里的CMyApp!)中,InitInstance是一个虚函数。只有一句return TRUE。这个函数的目的是给应用程序一个初始化的机会。由该函数返回的值决定了应用程序框架的下一步动作。如果该函数返回FALSE,那么应用程序将被关闭。如果初始化正常,那么就返回TRUE,应用程序将继续执行。这个函数是执行初始化的地方。在这里,这个工作就是创建一个窗口。*/m_pMainWnd = new CMainWindow;/*这里,实例化CMainWindow类来创建一个窗口。这里创建了一个CMainWindow对象将其地址复制到了应用程序对象的m_pMainWnd数据成员里面。在窗口创建之后,InitInstance就会通过CMainWindow指针调用ShowWindow和UpdateWindow来显示它。*///m_pMainWnd->ShowWindow(argument lists....);//m_pMainWnd->UpdateWindow(argument lists....);/*ShowWindow和UpdateWindow是所有窗口对象共用的CWnd成员函数。其中就包括了CFrameWnd,而CMainWindow就是从CFrameWnd派生出来的。这些函数几乎就是对同名API函数的包装。*//*如果你想在MFC应用程序中调用一个WIN API函数,那么需要在函数名称前面加一个“::”标示符。比如::UpdateWindow(argument lists...)这个是保证即便对象有同名的函数,也可以调用API函数。其他代码中的调用都是这么写的。*//*ShowWindow只接受一个参数,用来表示窗口显示的情况,是最大化,还是最小化还是怎么样。这里直接传递m_nCmdShow是根据Windows App设计协议中的规定这里的m_nCmdShow通常是SW_SHOWNORMAL来做的。*/m_pMainWnd->ShowWindow(m_nCmdShow);/*  UpdateWindow是来重绘窗口完成ShowWindow的启动作业的。*/m_pMainWnd->UpdateWindow();/* 完成后,InitInstance返回TRUE让应用程序继续执行。*/return TRUE;}BEGIN_MESSAGE_MAP (CMainWindow,CFrameWnd)ON_WM_PAINT()END_MESSAGE_MAP()CMainWindow::CMainWindow(){/* 在这里,框架窗口创建了一个窗口对象。其方法就是通过调用Create函数。 _T这个函数负责将字符串转化为中性。Create是CFrameWnd继承来的一个CMainWindow成员函数。 在CFrameWnd中,由它自己定义的和从CWnd继承来的函数大约有20个。Create就是其中之一。CFrameWnd::Create的原型参见书中P19。*/Create(NULL,_T("The Hello Application"));};/* 这个函数负责响应WM_PAINT消息。具体参见P21*/void CMainWindow::OnPaint(){CPaintDC dc(this);CRect rect;GetClientRect(&rect);dc.DrawText(_T("Hello,MFC"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);}