目錄
- 一、Windows訊息機制
- 視窗
- 句柄
- 訊息與訊息佇列
- WinMain函式
- Windows編程模型
- 二、MFC簡單介紹和使用
- MFC簡介
- MFC程式入口
- MFC的訊息映射
一、Windows訊息機制
視窗
一個Windows應用程式中至少有一個視窗,稱為主視窗,我們在客戶區進行圖案的繪制,
句柄
一個Windows應用程式是包含圖示、游標等許多部件(資源),系統在為這些部件(資源)分配記憶體后會回傳他們的標識號,也就是所謂的句柄,比如在Windows應用程式中,使用視窗句柄來標識每一個視窗,對視窗進行操作時候,首先就是得到這個視窗的標識,
訊息與訊息佇列
Windows是事件驅動方式的程式設計,當一個Windows應用程式開始執行的時候,系統會產生一個訊息佇列,用于保存這個視窗的訊息,eg:當你自己在一個視窗中按下鍵盤時候(事件),系統會收集到這個按下鍵盤事情(事件),然后包裝成訊息,放到這個視窗的訊息佇列中(視窗程序),因為佇列的先進先出的特點,這時候視窗會一個一個的讀取訊息,然后進行相應的執行處理,
WinMain函式
控制臺DOS中的入口是mian函式,而WinMain函式就是Windows程式的入口函式,啟動一個應用程式時候就開始先呼叫WinMain函式
Windows編程模型
一個應用程式的功能是:創建一個視窗,然后回應鍵盤或者滑鼠訊息,
- WinMain函式的定義
- 創建視窗
- 訊息回圈
- 視窗程序
二、MFC簡單介紹和使用
MFC簡介
MFC是微軟基礎類別庫,以C++類的形式封裝了Windows API,并且包含一個應用程式框架,類中包含了大量的windows句柄封裝類和很多windows的組件和內建控制元件的封裝類,MFC把Windows SDK API函式包裝成了幾百個類,MFC給Windows系統提供面向物件的介面,支持可重用性、自包含性以及OPP原則,
MFC程式入口
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"));
}
MFC的訊息映射
息映射就是將訊息和成員函式相互關聯的表,比如,Windows將一個滑鼠左擊訊息放到一個框架視窗訊息佇列中,然后這個視窗取到這個訊息時候,MFC將搜索該視窗的訊息映射,如果存在一個處理滑鼠左擊訊息(WM_LBUTTONDOWN)的處理程式,就呼叫,
下面是如何在一個類中撰寫一個訊息映射
- 在操作的類中宣告訊息宏
- 通過放置標識訊息的宏來執行訊息映射,相應的類將對BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的呼叫之間處理訊息
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){
.......
.......
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/169352.html
標籤:其他
