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

/*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);
}




你可能感兴趣的:(mfc,Windows程序设计第二版)