程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 在C#應用程序與DLL交互中使用消息(1)

在C#應用程序與DLL交互中使用消息(1)

編輯:關於C語言

C#是一種類似 Java 的完全面向對象的高級編程語言,其處理過程采用事件驅動方式,但在實際的使用過程中,有時候通過調用系統原有的消息處理起來會更簡單,特別是在處理與DLL文件的交互時,實踐證明的確是非常方便的。

在C#中使用自定義消息

在C#中使用自定義消息非常簡單,只需要下面幾個簡單的步驟就可以了:

1、定義消息

定義消息的方法與在VC中定義消息有一點點不同,比如在VC中申明一個自定義消息是這樣的:

#define WM_TEST WM_USER + 101

而在C#中消息需要定義成 Windows 系統中的原始的16進制數字,比如自定義消息

public const int USER = 0x0400;

那麼我們在VC中申明的自定義消息,在C#中就可以做對應的聲明:

public const int WM_TEST = USER+101;

2、發送消息

消息發送是通過 Windows 提供的 API 函數 SendMessage 來實現的,它的原型定義:

[DllImport("User32.dll",EntryPoint="SendMessage")]
private static extern int SendMessage(
IntPtr hWnd, // handle to destination window
uint Msg, // message
uint wParam, // first message parameter
uint lParam // second message parameter
);

3、消息接收

消息發出之後,在Form中如何接收呢?我們可以重載DefWinproc函數來接收消息。

protected override void DefWndProc ( ref System.Windows.Forms.Message m )
{
 switch(m.Msg)
 {
  case Message.WM_TEST: //處理消息
   break;
  default:
   base.DefWndProc(ref m);//調用基類函數處理非自定義消息。
   break;
 } 
}

在C#中使用系統消息

我們以WM_PAINT消息的處理為例,在C#中處理消息與MFC的消息處理是類似的,但更為簡單。MFC中需要使用DECLARE_MESSAGE_MAP來定義消息映射,在C#就不需要了。比如WM_PAINT消息,我們只要重載父類中的OnPaint虛擬方法即可,方法如下:

在菜單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.Windows.Forms.PaintEventArgs e )
{
 Font font = new Font("黑體",28);///定義字體:黑體,大小:28
 SolidBrush bluepen = new SolidBrush(Color.Blue);///創建藍色畫筆
 SolidBrush blackpen = new SolidBrush(Color.FromARGB(0xa0,0xa0,0xb0));///創建黑色畫筆
 e.Graphics.DrawString("VC知識庫",font,blackpen,65,25);///寫字符串
 ///偏移4個象素用不同的顏色再寫一次,達到立體效果
 e.Graphics.DrawString("VC知識庫",font,bluepen,61,21);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved