C 開發WINDOWS應用程式時訊息的處理

2021-06-15 22:28:35 字數 1553 閱讀 2816

windows應用程式是靠訊息驅動的,在vc中我們通過classwizard可以為某視窗類新增訊息處理函式,classwizard將為你新增訊息對映,對於windows訊息,生成的訊息處理函式過載了基類的虛擬方法。而在c#中如何處理訊息呢?本文針對vs.net beta1環境下的c#簡單地介紹windows訊息以及自定義訊息的處理方法。

工程的建立方法請參考:c#學習筆記之一

二、處理wm_paint訊息

我們以wm_paint訊息的處理為例,在c#中處理訊息與mfc的訊息處理是類似的,但更為簡單。mfc中需要使用declare_message_map來定義訊息對映,在c#就不需要了。比如wm_paint訊息,我們只要過載父類中的onpaint虛擬方法即可(雖然在beta1中過載父類虛擬方法的操作過程有點繁瑣),方法如下:

在選單view->other windows->object browser開啟物件瀏覽視窗(或用ctrl+alt+j開啟),在我們的工程名下找到form並選中,這時在右邊的視窗列出所有form類的成員函式,如圖所示:

我們選中onpaint(system.winforms.painteventargs)此時在下面會顯示完整的onpaint函式protected void onpaint ( system.winforms.painteventargs e )我們將這一行字串copy下來。開啟form1.cs進行**編輯,我們把剛才拷貝下來的函式定義複製到form1類裡面,並加上override關鍵字,此時我們便可以在裡面新增我們的訊息處理**了,請參考如下**段:

protected override void onpaint ( system.winforms.painteventargs e )

對於其它訊息的處理以及對其它父類虛函式的過載都可以採用同樣的方法。

三、自定義訊息的處理

為了處理的方便,在這裡我們將需要使用到的自定義訊息封裝成乙個類,類的新增過程如下:

public class wm

我們在form1中新增乙個按鈕,並為該按鈕新增事件處理**(假如您對這個過程不熟悉,請參考:c#學習筆記之一)

向主視窗傳送test1自定義訊息,具體**如下:

protected void button1_click (object sender, system.eventargs e)

訊息已經發出了,在form1中我們如何對該訊息作出響應呢?我們可以過載 defwndproc方法。

protected override void defwndproc ( ref system.winforms.message m )

,",m.wparam,m.lparam);

messagebox.show(message);///顯示乙個訊息框

break;

default:

base.defwndproc(ref m);///呼叫基類函式處理非自定義訊息。

break;}}

程式執行結果如圖

當我們點傳送訊息按鈕,彈出訊息框並顯示收到的引數。

後記:可以預料在vs.net beta1的後繼版本中對上述過程的操作會有很大改變,但原理是一致的。讓我們期待更完美的c#展現在我們面前。  

Windows應用程式開發1

一 訊息 msg 作業系統將傳遞的資訊包裝成msg類給應用程式 typedef struct tagmsg msg 其中對於message,微軟對這些行為定義了一系列的巨集 wm 開頭,windows macro,比如wm lbuttondown 二 winmain int winapi winma...

c 應用程式開發

與access建立聯絡 oledb c access 讀寫資料庫 c 連線access資料庫及增刪改查操作 c 讀取資料庫有多少條資料 c int轉成string,string轉成int 1,int轉成string 用tostring 或者convert.tostring 如下 例如 int var...

c 開發windows應用程式幾個小技巧

1.乙個應用程式只能被使用者開啟一次 process mobj pro process.getcurrentprocess process mobj prolist process.getprocessesbyname mobj pro.processname if mobj prolist.len...