1 / 34

Advance Window Programming

Advance Window Programming. 游子宜. MFC 類別函式庫 MFC(Microsoft Foundation Class Library) 是一套整合在 VC++ 中供開發視窗程式用的類別函式庫,提供了豐富的類別函式供程式設計師來開發各類的視窗應用程式。. 使用 MFC 開發視窗程式的優點 一、程式架構簡單 二、各類別功能涵蓋範圍廣 三、 簡化使用 Windows API 來開發程式的難度. 應用程式與視窗物件. 應用程式物件. 在應用程式物件中生成主視窗物件. 快速鍵 滑鼠游標 功能表 工具列 對話方塊. 視窗程式開發兩種架構

betty
Download Presentation

Advance Window Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. WindowsAPI MFC 應用程式

  8. 訊息表 事件 按下滑鼠左鍵 移動滑鼠 訊息定義在訊息表中 執行對應的處理函式 不處理 發出訊息 發出訊息 訊息末定義在訊息表中 處理事件訊息的概念

  9. Message Handle • Create a MFC Project • 1.建立一個空專案並設定該專案使用MFC。 • 2.使用MFC專案精靈建立專案。 • 何謂訊息(message) • Standard System Message • Command Message • 訊息處理的方法 • Using Macro: BEGIN_MESSAGE_MAP……END_MESSAGE_MAP () • 鍵盤與滑鼠訊息處理

  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() • afx_msg void classname::OnMouseMove(UINT nFlags, CPoint point){ //implement how you like your app works when mouse move} • afx_msg void Function() { … }

  16. 利用ClassWizard的功能,只要在某一個所要處理的訊息上快按滑鼠兩下,便可在程式中設定處理該訊息。 或是利用 Add Class方法亦可加入新類別。

  17. 新增訊息處理函式 • 假設現在程式要處理使用者在視窗中按下滑鼠左鍵的訊息,那麼可在ClassWizard中選擇要處理的訊息為「WM_LBUTTONDOWN」,該訊息代表在視窗中按下滑鼠左鍵:

  18. 指令訊息處理函式

  19. 指令訊息處理函式

  20. 刪除訊息處理函式

  21. 鍵盤與滑鼠訊息處理 • 基本的滑鼠訊息類型 • 請仔細的思考當使用滑鼠來進行視窗螢幕的操作時會有那些動作? • 下表列出各個滑鼠訊息與相關處理函式:

  22. 滑鼠訊息 處理函式 說明 WM_LBUTTONDBCLK OnLButtonDblClk 雙按滑鼠左鍵 WM_LBUTTONDOWN OnLButtonDown 按下滑鼠左鍵 WM_LBUTTONUP OnLButtonUp 鬆開滑鼠左鍵 WM_RBUTTONDBCLK OnRButtonDblClk 雙按滑鼠右鍵 WM_RBUTTONDOWN OnRButtonDown 按下滑鼠右鍵 WM_RBUTTONUP OnRButtonUp 鬆開滑鼠右鍵 WM_MOUSEMOVE OnMouseMove 滑鼠移動 WM_MOUSEWHEEL OnMouseWheel 捲動滾輪

  23. 虛擬碼 說明 MK_CONTROL    按下Ctrl鍵 MK_LBUTTON    按下滑鼠左鍵 MK_MBUTTON    按下滑鼠中鍵 MK_RBUTTON    按下滑鼠右鍵 MK_SHIFT    按下Shift鍵 虛擬碼

  24. 擷取視窗的滑鼠訊息 若程式本身必須監控滑鼠在螢幕上任何地方,即使是在程式視窗外所發出的訊息,可以呼叫下面的這個函式: CWnd* SetCapture( );

  25. 擷取視窗的滑鼠訊息 傳回目前取得滑鼠訊息接收權之視窗的指標,可以呼叫下面的這個函式: CWnd* GetCapture( ); if (this == GetCapture())

  26. 若要釋放視窗監控滑鼠在視窗發出訊息的權利,則必須呼叫下面的這個Windows API函式: BOOL ReleaseCapture(VOID);

  27. 鍵盤訊息 處理函式 說明 WM_KEYDOWN OnKeyDown 按下鍵盤按鍵 WM_KEYUP OnKeyUp 鬆開鍵盤按鍵 WM_CHAR OnChar 按下鍵盤按鍵,並傳回按鍵字元 • 基本的鍵盤訊息類型 • 幾個常見的鍵盤訊息類型與對應的處理函式:

  28. 指令介紹 • int CWnd::MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT Ntype = MB_OK); • CClientDC aDC(this); //建立畫布 • aDC.SetPixel(point, RGB(r,g,b)); • COLORREF CDC::SetPixel(int x, int y, COLORREF crCOlor); • COLORREF CDC::SetPixel(POINT point, COLORREF crCOlor);

  29. 範例練習 • 課本的範例 • 實作範例

More Related