對於處理所有訊息.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...