首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

在 C# 應用程式與 DLL 交互中使用訊息 (1):基礎觀念與 API 宣告

     編輯:關於C語言

C# 使用自訂訊息

C# 採事件驅動,但實際使用中透過系統原有訊息處理有時更簡單,特別是處理 DLL 交互時極方便。使用自訂訊息只需幾個簡單步驟:

1. 定義訊息

C# 訊息需定義為 Windows 系統原始 16 進制數字。VC 中 #define WM_TEST WM_USER + 101,C# 對應宣告:

public const int USER = 0x0400;
public const int WM_TEST = USER + 101;

2. 發送訊息

透過 Windows API SendMessage 實現:

[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(
    IntPtr hWnd, uint Msg, uint wParam, uint lParam);

3. 接收訊息

覆寫 DefWndProc 接收:

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 為例,類似 MFC 但更簡單(無需 DECLARE_MESSAGE_MAP)。覆寫父類別 OnPaint 虛擬方法:

  1. 開啟物件瀏覽器 (Ctrl+Alt+J),專案下找到 Form 選中,右側列出所有成員。
  2. 選中 OnPaint(System.WinForms.PaintEventArgs),複製完整定義 protected void OnPaint(System.WinForms.PaintEventArgs e)。
  3. 貼上至 Form1.cs 類別內,加上 override 關鍵字,即可添加繪圖代碼。

WM_PAINT 繪圖範例

protected override void OnPaint(PaintEventArgs e)
{
    Font font = new Font("黑體", 28);
    SolidBrush bluepen = new SolidBrush(Color.Blue);
    SolidBrush blackpen = new SolidBrush(Color.FromArgb(0xa0, 0xa0, 0xb0));
    e.Graphics.DrawString("VC知識庫", font, blackpen, 65, 25);
    e.Graphics.DrawString("VC知識庫", font, bluepen, 61, 21); // 偏移 4 像素立體效果
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved