Advance window programming
Download
1 / 34

Advance Window Programming - PowerPoint PPT Presentation


  • 114 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Advance Window Programming' - betty


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  • MFC類別函式庫

  • MFC(Microsoft Foundation Class Library)是一套整合在VC++中供開發視窗程式用的類別函式庫,提供了豐富的類別函式供程式設計師來開發各類的視窗應用程式。


  • 使用MFC開發視窗程式的優點

  • 一、程式架構簡單

  • 二、各類別功能涵蓋範圍廣

  • 三、簡化使用Windows API來開發程式的難度


應用程式與視窗物件

應用程式物件

在應用程式物件中生成主視窗物件


快速鍵

滑鼠游標

功能表

工具列

對話方塊


  • 視窗程式開發兩種架構

  • 一、使用Windows API

  • 二、使用MFC

  • 使用MFC來開發程式比較簡單,並且在MFC程式中亦可直接呼叫使用Windows API中的函式。

  • 不過在程式的執行效能上,使用Windows API所開發出的程式在執行速度上則會比較快,對於講求執行速度的程式,如遊戲程式,通常會以Windows API來做為程式開發的基礎。


WindowsAPI

MFC

應用程式


訊息表

事件

按下滑鼠左鍵

移動滑鼠

訊息定義在訊息表中

執行對應的處理函式

不處理

發出訊息

發出訊息

訊息末定義在訊息表中

處理事件訊息的概念


Message handle
Message Handle

  • Create a MFC Project

    • 1.建立一個空專案並設定該專案使用MFC。

    • 2.使用MFC專案精靈建立專案。

  • 何謂訊息(message)

    • Standard System Message

    • Command Message

  • 訊息處理的方法

    • Using Macro: BEGIN_MESSAGE_MAP……END_MESSAGE_MAP ()

  • 鍵盤與滑鼠訊息處理


  • 訊息處理函式

  • 訊息的類型大致可分為兩種: 一、物件上可能產生的事件所發出的訊息 二、指令訊息

  • 我們可執行ClassWizard來查看所有的訊息類型與指定要處理的訊息:


訊息處理的方法

使用訊息表的原則

  • 在類別的定義檔中先宣告訊息表與訊息處理函式。

  • 在類別的實作檔中定義訊息表的內容(包含所要處理的訊息並指定處理函式)。


1



2


How to work on message
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() { … }


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


  • 新增訊息處理函式

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





鍵盤與滑鼠訊息處理

  • 基本的滑鼠訊息類型

  • 請仔細的思考當使用滑鼠來進行視窗螢幕的操作時會有那些動作?

  • 下表列出各個滑鼠訊息與相關處理函式:


滑鼠訊息

處理函式

說明

WM_LBUTTONDBCLK

OnLButtonDblClk

雙按滑鼠左鍵

WM_LBUTTONDOWN

OnLButtonDown

按下滑鼠左鍵

WM_LBUTTONUP

OnLButtonUp

鬆開滑鼠左鍵

WM_RBUTTONDBCLK

OnRButtonDblClk

雙按滑鼠右鍵

WM_RBUTTONDOWN

OnRButtonDown

按下滑鼠右鍵

WM_RBUTTONUP

OnRButtonUp

鬆開滑鼠右鍵

WM_MOUSEMOVE

OnMouseMove

滑鼠移動

WM_MOUSEWHEEL

OnMouseWheel

捲動滾輪


虛擬碼

說明

MK_CONTROL   

按下Ctrl鍵

MK_LBUTTON   

按下滑鼠左鍵

MK_MBUTTON   

按下滑鼠中鍵

MK_RBUTTON   

按下滑鼠右鍵

MK_SHIFT   

按下Shift鍵

虛擬碼


擷取視窗的滑鼠訊息

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

CWnd* SetCapture( );


擷取視窗的滑鼠訊息

傳回目前取得滑鼠訊息接收權之視窗的指標,可以呼叫下面的這個函式:

CWnd* GetCapture( );

if (this == GetCapture())


Windows api
若要釋放視窗監控滑鼠在視窗發出訊息的權利,則必須呼叫下面的這個若要釋放視窗監控滑鼠在視窗發出訊息的權利,則必須呼叫下面的這個Windows API函式:

BOOL ReleaseCapture(VOID);


鍵盤訊息若要釋放視窗監控滑鼠在視窗發出訊息的權利,則必須呼叫下面的這個

處理函式

說明

WM_KEYDOWN

OnKeyDown

按下鍵盤按鍵

WM_KEYUP

OnKeyUp

鬆開鍵盤按鍵

WM_CHAR

OnChar

按下鍵盤按鍵,並傳回按鍵字元

  • 基本的鍵盤訊息類型

  • 幾個常見的鍵盤訊息類型與對應的處理函式:


指令介紹若要釋放視窗監控滑鼠在視窗發出訊息的權利,則必須呼叫下面的這個

  • 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);


範例練習若要釋放視窗監控滑鼠在視窗發出訊息的權利,則必須呼叫下面的這個

  • 課本的範例

  • 實作範例


ad