Download presentation
Presentation is loading. Please wait.
1
Advance Window Programming 游子宜
2
MFC 類別函式庫 MFC(Microsoft Foundation Class Library) 是一套 整合在 VC++ 中供開發視窗程式用的類別函式庫, 提供了豐富的類別函式供程式設計師來開發各類 的視窗應用程式。
3
使用 MFC 開發視窗程式的優點 一、程式架構簡單 二、各類別功能涵蓋範圍廣 三、 簡化使用 Windows API 來開發程式的難度
4
應用程式與視窗物件 應用程式 物件 在應用程式 物件中生成 主視窗物件
5
快速鍵 滑鼠游標 功能表 工具列 對話方塊
6
視窗程式開發兩種架構 一 、使用 Windows API 二、使用 MFC 使用 MFC 來開發程式比較簡單,並且在 MFC 程式中 亦可直接呼叫使用 Windows API 中的函式。 不過在程式的執行效能上,使用 Windows API 所開發 出的程式在執行速度上則會比較快,對於講求執行速 度的程式,如遊戲程式,通常會以 Windows API 來做 為程式開發的基礎。
7
應用程式 MFCWindows API
8
處理事件訊息的概念 事件 按下滑鼠左鍵 移動滑鼠 發出訊息 訊息定義在訊息 表中 訊息末定義在訊 息表中 執行對應的 處理函式 不處理 訊息表
9
Create a MFC Project Create a MFC Project – 1. 建立一個空專案並設定該專案使用 MFC 。 – 2. 使用 MFC 專案精靈建立專案。 何謂訊息 (message) 何謂訊息 (message) –Standard System Message –Command Message 訊息處理的方法 訊息處理的方法 訊息處理的方法 –Using Macro: BEGIN_MESSAGE_MAP … … END_MESSAGE_MAP () 鍵盤與滑鼠訊息處理 鍵盤與滑鼠訊息處理 鍵盤與滑鼠訊息處理 Message Handle
10
訊息處理函式 訊息的類型大致可分為兩種: 一、物件上可能產生的事件所發出的訊息 二、指令訊息 我們可執行 ClassWizard 來查看所有的訊息類型 與指定要處理的訊息:
11
訊息處理的方法 在類別的定義檔中先宣告訊息表與訊 息處理函式。 在類別的定義檔中先宣告訊息表與訊 息處理函式。 在類別的實作檔中定義訊息表的內容 ( 包含所要處理的訊息並指定處理函式 ) 。 在類別的實作檔中定義訊息表的內容 ( 包含所要處理的訊息並指定處理函式 ) 。 使用訊息表的原則
12
1
13
.NET Message
14
2
15
How to work on Message BEGIN_MESSAGE_MAP( …, … ) ON_WM_MOUSEMOVE() ON_COMMAND(ID,Function) END_MESSAGE_MAP() BEGIN_MESSAGE_MAP( …, … ) ON_WM_MOUSEMOVE() ON_COMMAND(ID,Function) END_MESSAGE_MAP() afx_msg void classname::OnMouseMove(UINT nFlags, CPoint point) { //implement how you like your app works when mouse move } afx_msg void classname::OnMouseMove(UINT nFlags, CPoint point) { //implement how you like your app works when mouse move } afx_msg void Function() { … } afx_msg void Function() { … }
16
利用 ClassWizard 的功能,只要在某一 個所要處理的訊息上快按滑鼠兩下,便 可在程式中設定處理該訊息。 或是利用 Add Class 方法亦可加入新類別 。
17
新增訊息處理函式 假設現在程式要處理使用者在視窗中按 下滑鼠左鍵的訊息,那麼可在 ClassWizard 中選 擇要處理的訊息為「 WM_LBUTTONDOWN 」,該訊息代表在視窗中按下滑鼠左鍵:
20
指令訊息處理函式
21
指令訊息處理函式
25
刪除訊息處理函式
26
基本的滑鼠訊息類型 請仔細的思考當使用滑鼠來進行視窗螢幕 的操作時會有那些動作? 下表列出各個滑鼠訊息與相關處理函式: 鍵盤與滑鼠訊息處理
27
滑鼠訊息處理函式說明 WM_LBUTTONDBCLKOnLButtonDblClk 雙按滑鼠左鍵 WM_LBUTTONDOWNOnLButtonDown 按下滑鼠左鍵 WM_LBUTTONUPOnLButtonUp 鬆開滑鼠左鍵 WM_RBUTTONDBCLKOnRButtonDblClk 雙按滑鼠右鍵 WM_RBUTTONDOWNOnRButtonDown 按下滑鼠右鍵 WM_RBUTTONUPOnRButtonUp 鬆開滑鼠右鍵 WM_MOUSEMOVEOnMouseMove 滑鼠移動 WM_MOUSEWHEELOnMouseWheel 捲動滾輪
28
虛擬碼 虛擬碼說明 MK_CONTROL 按下 Ctrl 鍵 MK_LBUTTON 按下滑鼠左鍵 MK_MBUTTON 按下滑鼠中鍵 MK_RBUTTON 按下滑鼠右鍵 MK_SHIFT 按下 Shift 鍵
29
擷取視窗的滑鼠訊息 若程式本身必須監控滑鼠在螢幕上任何地方,即使 是在程式視窗外所發出的訊息,可以呼叫下面的這 個函式: CWnd* SetCapture( );
30
擷取視窗的滑鼠訊息 傳回目前取得滑鼠訊息接收權之視窗的指標,可以 呼叫下面的這個函式: CWnd* GetCapture( ); if (this == GetCapture())
31
若要釋放視窗監控滑鼠在視窗發 出訊息的權利,則必須呼叫下面 的這個 Windows API 函式: BOOL ReleaseCapture(VOID);
32
基本的鍵盤訊息類型 幾個常見的鍵盤訊息類型與對應的處理函式: 鍵盤訊息處理函式說明 WM_KEYDOWNOnKeyDown 按下鍵盤按鍵 WM_KEYUPOnKeyUp 鬆開鍵盤按鍵 WM_CHAROnChar 按下鍵盤按鍵,並傳回按鍵字元
33
指令介紹 int CWnd::MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT Ntype = MB_OK); int CWnd::MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT Ntype = MB_OK); CClientDC aDC(this); // 建立畫布 CClientDC aDC(this); // 建立畫布 aDC.SetPixel(point, RGB(r,g,b)); aDC.SetPixel(point, RGB(r,g,b)); COLORREF CDC::SetPixel(int x, int y, COLORREF crCOlor); COLORREF CDC::SetPixel(int x, int y, COLORREF crCOlor); COLORREF CDC::SetPixel(POINT point, COLORREF crCOlor); COLORREF CDC::SetPixel(POINT point, COLORREF crCOlor);
34
範例練習 課本的範例 課本的範例 實作範例 實作範例
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.