第一个MFC程序
1、建立一个SDI程序“3SDI”
2、介绍SDI程序中的App类,Frame类,View类,Doc类,以及他们之间的相互关系。
3、WinMain咋不见了?简单的跟踪执行,理解SDI执行过程。
4、在View类的OnDraw中输出”Hello world!”
5、事件、消息、虚函数
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
ON_WM_CREATE()
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
ON_WM_KEYDOWN()
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) //static
afx_msg void OnAppAbout();
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void OnDraw(CDC* pDC); // overridden to draw this view
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
ON_WM_ERASEBKGND()
BOOL CSDIView::OnEraseBkgnd(CDC* pDC)
{
static BOOL bDone = FALSE;
if (bDone == FALSE)
{
bDone = TRUE;
HBRUSH hBrush = (HBRUSH)::GetStockObject(BLACK_BRUSH);
::SetClassLong(m_hWnd, GCL_HBRBACKGROUND, (LONG)hBrush);
//联想到::SetWindowLong()函数,作用是?
}
return CView::OnEraseBkgnd(pDC);
}
在前面的课程中,我们处理消息时,除了要判断主消息值uMsg外,总是要判断wParam和lParam这2个附加消息参数,以完整的表达一个消息的全部含义。但上面的OnKeyDown和OnLButtonDown中,我们没有见到wParam和lParam的身影,这是因为MFC已经智能的帮助我们将这2个参数转换成了相应消息函数的参数了,转换后的参数直接表明了参数的具体含义,更加人性化了。www.zzzyk.com
PreCreateWindow和OnCreate的不同在于:OnCreate是消息WM_CREATE的响应函数,是由::CreateWindow函数触发的消息。而PreCreateWindow不对应任何消息,它只是一个虚函数,是在其父类中的::CreateWindow函数之前调用的,是为了给程序员一个在CreateWindow执行之前改变窗口外观的机会。OnCreate和PreCreateWindow函数的参数中都涉及到了一个CREATESTRUCT结构,其作用相同。PreCreateWindow先执行,OnCreate后执行。
由此可以推断,虚函数OnDraw也是类似的作用,是在消息WM_PAINT的响应函数OnPaint中进行调用的。实际情况也是如此,可以跟踪MFC的核心代码可以证实这点。
[cpp]
//文件VIEWCORE.CPP代码片段:
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
//文件VIEWCORE.CPP代码片段:
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
6、预编译头文件stdafx.h,对MFC源代码的引用就在这里。
[cpp]
#include <afxwin.h> // MFC核心和标准组
#include <afxext.h> // MFC扩展
#include <afxdisp.h> // MFC自动化类
#include <afxdtctl.h> // MFC支持的IE4的通用控件
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC支持的Windows通用控件
#endif // _AFX_NO_AFXCMN_SUPPORT
摘自 qq1712088151
补充:软件开发 , C++ ,