当前位置:编程学习 > C/C++ >>

第一个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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,