程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> MFC學習筆記(二)

MFC學習筆記(二)

編輯:.NET實例教程

建立一個名為Draw的工程

CDrawView類始終是覆蓋在CMainFrame類之上的,我們在窗口上所做的操作由於受到CxxView的遮擋,只能被CxxVIEw類捕獲。

在CDrawVIEw.h文件中:

 //{{AFX_MSG(CDrawVIEw)
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
 //}}AFX_MSG

這裡的//{{AFX_MSG(CDrawVIEw)和//}}AFX_MSG是一對注釋宏,在這對注釋宏中間,是一些聲明消息響應函數的宏

在CDrawVIEw.cpp文件中:

BEGIN_MESSAGE_MAP(CDrawView, CVIEw)
 //{{AFX_MSG_MAP(CDrawVIEw)
 ON_WM_LBUTTONDOWN()
 ON_WM_LBUTTONUP()
 ON_WM_MOUSEMOVE()
 //}}AFX_MSG_MAP
 // Standard printing commands
 ON_COMMAND(ID_FILE_PRINT, CVIEw::OnFilePrint)
 ON_COMMAND(ID_FILE_PRINT_DIRECT, CVIEw::OnFilePrint)
 ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPrevIEw)
END_MESSAGE_MAP()

這裡的ON_WM_LBUTTONDOWN() , ON_WM_LBUTTONUP() , ON_WM_MOUSEMOVE() 等宏將消息和消息響應函數關聯起來。一旦有消息產生,就會去調用消息響應函數


MFC中處理消息是采用消息映射的方法。

消息映射機制的基本原理:
 消息的產生都是和句柄相關的,在每個MFC程序中維護著一個句柄和C++類指針之間的映射表,當消息產生時,就可以從映射表中找到與句柄相對應的C++類的指針,然後將這個指針傳遞給基類,調用基類中的windowProc函數,windowProc再調用OnMessage函數,在這個OnMessage中來判斷消息的類型,查找與之有關的消息映射(頭文件和源文件),若找到消息響應函數,調用這個響應函數來處理消息。

 


CDC是由CObject派生而來的,表示設備環境(Device-Context 或者叫設備上下文)的類,按照微軟的叫法:Graphical Drawing Classes,用於繪制圖形、文本等。由CDC派生出來的CClIEntDC、CPaintDC、CWindowDC、CMetaFileDC都各有用途。

 HDC hdc;
 hdc=::GetDC(m_hWnd); // m_hWnd是一個全局變量,是指向當前應用程序實例的句柄
 MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
 LineTo(hdc,point.x,point.y);
 ::ReleaseDC(m_hWnd,hdc);// 釋放DC,因為Windows對設備環境的使用數量做了限制


 CDC *pDC=GetDC();
 pDC->MoveTo(m_ptOrigin);
 pDC->LineTo(point);
 ReleaseDC(pDC);  // 使用CDC也需要手動釋放DC,但使用CClIEntDC、CPaintDC、CWindowDC、CMetaFileDC不需要手動釋放DC,它們的釋放是自動,由析構函數完成。

 CClIEntDC dc(this);
 CClIEntDC dc(GetParent());
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);

 CWindowDC dc(this);
 //CWindowDC dc(GetParent());
 //CWindowDC dc(GetDesktopWindow());
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);

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