C 中訊息處理

2022-02-12 11:22:59 字數 1806 閱讀 3597

對於處理所有訊息.net 提供了wndproc進行重寫

wndproc(ref message m)

protected override void wndproc(ref message m)

base.wndproc(ref m);

} 在.net中,程式驅動採用了事件驅動而不是原來的訊息驅動,

雖然.net框架提供的事件已經十分豐富,但是在以前的系統中定義了

豐富的訊息對系統的程式設計提供了方便的實現方法,因此在.net中使用消

息有時候可以提高程式設計的效率的。

1 定義訊息

在c#中訊息需要定義成windows系統中的原始的16進製制數字,比如

const int wm_lbutton = 0x201;  //定義了滑鼠的左鍵點選訊息

public const int user = 0x0400; // 是windows系統定義的使用者訊息

2 訊息傳送

訊息傳送是通過windows提供的api函式sendmessage來實現的它的原型定義為

[dllimport("user32.dll",entrypoint="sendmessage")]

private static extern int sendmessage(

int hwnd, // handle to destination window

int msg,    // message

int wparam,   // first message parameter

int lparam     // second message parameter

); 3 訊息的接受  

在.net中,任何乙個視窗都有訊息的接收處理函式,就是wndproc函式

你可以在form中重寫該函式來處理訊息

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

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

messagebox.show(message);

break;

default:

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

break;

} }

其實,c#中的事件也是通過封裝系統訊息來實現的,如果你在wndproc函式中不處理該訊息

那麼,它會被交給系統來處理該訊息,系統便會通過**來實現滑鼠單擊的處理函式,因此你可以通過

wndproc函式來攔截訊息,比如你想攔截某個按鈕的單擊訊息

4 c#中其他的訊息處理方法

在c#中有的時候需要對控制項的訊息進行預處理,比如你用owc的spreedsheet控制項來處理

excel檔案,你不想讓使用者可以隨便選中資料進行編輯,你就可以遮蔽掉滑鼠事件,這個時

候就必須攔截系統預先定義好的事件(這在mfc中稱為子類化),你可以通過c#提供的乙個

介面 imessagefilter來實現訊息的過濾

public class form1: system..forms.form,imessagefilter

return false;  } }

//.net 提供了processcmdkey 重新實現form的鍵盤訊息

protected override bool processcmdkey(ref system.windows.forms.message msg, system.windows.forms.keys keydata)        

}return false;

}

C 中 訊息的處理

1.afx msg 在標頭檔案 drawview.h 中宣告訊息響應函式原型。afx msg 注釋巨集 說明 在注釋巨集之間的宣告在vc中灰色顯示。afx msg巨集表示宣告的是乙個訊息響應函式 afx msg訊息函式 應用程式 框架產生的訊息對映函式 例如 afx msg void onbncli...

c 訊息處理

a.作業系統接收應用程式的視窗訊息,將訊息投遞到該應用程式的訊息佇列中 b.應用程式在訊息迴圈中呼叫 getmessage 函式從訊息佇列中取出一條一條的訊息,取出訊息後,應用程式可以對訊息進行一些預處理 pretranslatemessage translatemessage c.應用程式呼叫 d...

關於c 中的訊息處理函式和vc中的訊息處理函式區別

從vc入門程式設計的,相信大家都很熟悉pretranslatemessage和windowproc兩個函式,前者是預處理windows發給控制項的訊息,後者是處理剩餘的控制項訊息。對於pretranslatemessage函式,一般來說,我們是這樣處理控制項訊息的 bool test pretran...