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

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

編輯:關於C語言

示例應用

1、定義消息

我們在工程中添加一個Message類用來定義消息。然後添加了三個成員變量,其中USER為自定義消息的初始值,相當與MFC中的WM_USER。WM_TEST為自定義的用來響應應用程序的消息,WM_MSG為自定義的用來響應DLL傳遞過來的消息。如何在DLL定義消息請參考文章:VC.Net從DLL傳遞消息到DLL。

public class Message
{
 public const int USER = 0x0400;
 //as mfc Define WM_TEST WM_USER + 101
 public const int WM_TEST = USER+101;
 public const int WM_MSG = USER+102;
}

2、聲明引用函數

在使用消息的地方,申明引用的函數,我們這裡在MsgForm.cs文件中申明:

//申明發送消息函數
[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
);
//申明DLL中啟動消息函數
[DllImport("MessageDLL.dll",EntryPoint="StartSendMessage")]
private extern static void StartSendMessage(IntPtr hWnd);

3、處理系統消息

protected override void OnPaint ( System.Windows.Forms.PaintEventArgs e )
{
 ///定義字體:黑體,大小:28
 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);
 ///偏移4個象素用不同的顏色再寫一次,達到立體效果
 e.Graphics.DrawString("VC知識庫",font,bluepen,61,21);
}

4、 觸發自定義消息

//測試應用程序消息
private void TestAppbutton_Click(object sender, System.EventArgs e)
{
 SendMessage(this.Handle,Message.WM_TEST,100,200);
}
//測試DLL消息
private void TestDLLbutton_Click(object sender, System.EventArgs e)
{
 StartSendMessage(this.Handle);
}

5、響應和處理自定義消息

protected override void DefWndProc ( ref System.Windows.Forms.Message m )
{
 string message;
 switch(m.Msg)
 {
  case Message.WM_TEST://處理消息
   message = string.Format("收到從應用程序發出的消息!參數為:{0},{1}",m.WParam,m.LParam);
   MessageBox.Show(message);///顯示一個消息框
   break;
  case Message.WM_MSG:
   message = string.Format("收到從DLL發出的消息!參數為:{0},{1}",m.WParam,m.LParam);
   MessageBox.Show(message);///顯示一個消息框
   break;
  default:
   base.DefWndProc(ref m);//調用基類函數處理非自定義消息。
   break;
 }
}

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