程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第一個MFC程序

第一個MFC程序

編輯:C++入門知識

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.2cto.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
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved