一個Windows應用程式中至少有一個視窗,稱為主視窗。我們在客戶區進行圖案的繪製。
一個Windows應用程式是包含圖示、遊標等許多部件(資源),系統在為這些部件(資源)分配記憶體後會返回他們的標識號,也就是所謂的控制程式碼。比如在Windows應用程式中,使用視窗控制程式碼來標識每一個視窗。對視窗進行操作時候,首先就是得到這個視窗的標識。
Windows是事件驅動方式的程式設計,當一個Windows應用程式開始執行的時候,系統會產生一個訊息佇列,用於儲存這個視窗的訊息。eg:當你自己在一個視窗中按下鍵盤時候(事件),系統會收集到這個按下鍵盤事情(事件),然後包裝成訊息,放到這個視窗的訊息佇列中(視窗過程)。因為佇列的先進先出的特點,這時候視窗會一個一個的讀取訊息,然後進行相應的執行處理。
控制檯DOS中的入口是mian函數,而WinMain函數就是Windows程式的入口函數。啟動一個應用程式時候就開始先呼叫WinMain函數
一個應用程式的功能是:建立一個視窗,然後響應鍵盤或者滑鼠訊息。
MFC是微軟基礎類庫,以C++類的形式封裝了Windows API,並且包含一個應用程式框架。類中包含了大量的windows控制程式碼封裝類和很多windows的元件和內建控制元件的封裝類。MFC把Windows SDK API函數包裝成了幾百個類,MFC給Windows系統提供物件導向的介面,支援可重用性、自包含性以及OPP原則。
MFC.h
//mfc標頭檔案
#include<afxwin.h>
//1、應用程式類CWinApp,MyAPP派生類
class MyApp : public CWinApp{
public:
//父類別的虛擬函式,需要派生類進行重寫
//也是MFC函數的入口函數
virtual BOOL InitInstance();
};
//2、框架類CFrameWnd,MyFrame派生類
class MyFrame : public CFrameWnd{
public:
//建構函式
MyFrame();
}
MFC.cpp
//對應類的標頭檔案
#include "mfc.h"
//有且只有一個的全域性應用程式類的物件
MyApp app;
//程式入口
BOOL MyApp::InitInstance(){
//1、建立類框架
MyFrame *frame = new MyFrame;
//2、顯示視窗
frame -> ShowWindow(SW_SHOWNORMAL);
//3、更新視窗
frame -> UpdateWindow();
//4、儲存框架類物件指標
m_pMainWnd = frame;
return TRUE;
}
//重寫建構函式
MyFrame::MyFrame(){
//建立視窗
Create(NULL,TEXT("mfc"));
}
息對映就是將訊息和成員函數相互關聯的表。比如,Windows將一個滑鼠左擊訊息放到一個框架視窗訊息佇列中,然後這個視窗取到這個訊息時候,MFC將搜尋該視窗的訊息對映,如果存在一個處理滑鼠左擊訊息(WM_LBUTTONDOWN)的處理程式,就呼叫。
下面是如何在一個類中編寫一個訊息對映
mfc.h
class MyFrame : public CFrameWnd{
public:
MyFrame();
//宣告訊息宏
DECLARE_MESSAGE_MAP()
}
mfc.cpp
//定義訊息宏,在類中實現(派生類,父類別)
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
ON_WM_LBUTTONDOWN
END_MESSAGE_MAP()
//重寫建構函式
MyFrame::MyFrame(){
//建立視窗
Create(NULL,TEXT("mfc"));
}
對應的處理常式分別在類中宣告,類外定義
mfc.h
//框架類CFrameWnd,MyFrame派生類
class MyFrame : public CFrameWnd{
public:
//建構函式
MyFrame();
//宣告訊息宏
DECLARE_MESSAGE_MAP()
//函數宣告
dfx_msg void OnLButtonDown(UINT,CPoint);
}
mfc.cpp
//定義訊息宏,在類中實現(派生類,父類別)
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
ON_WM_LBUTTONDOWN
END_MESSAGE_MAP()
//重寫建構函式
MyFrame::MyFrame(){
//建立視窗
Create(NULL,TEXT("mfc"));
}
//定義具體函數的實現
void OnLButtonDown(UINT,CPoint){
.......
.......
}