亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 19:36:16
字體:
來源:轉載
供稿:網友

  在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);///定義字體:黑體,大?。?8
 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、定義消息

  我們在工程中添加一個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 )
{
 ///定義字體:黑體,大?。?8
 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;
 }
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美国产网站| 久久综合伊人77777蜜臀| 少妇精69xxtheporn| 精品国产一区二区三区久久久| 俺去亚洲欧洲欧美日韩| 国产精品久久久久77777| 久久久久久香蕉网| 日韩精品在线观| 91精品视频免费看| 久热精品视频在线观看一区| 91精品久久久久久综合乱菊| 亚洲成人av片| 亚洲福利视频在线| 成人免费在线视频网站| 精品亚洲va在线va天堂资源站| 午夜精品久久久久久久99黑人| 国产精品色午夜在线观看| 欧美日韩激情网| 国产精品一香蕉国产线看观看| 亚洲精品456在线播放狼人| 91精品久久久久久久久青青| 亚洲福利精品在线| 91沈先生作品| 亚洲精品视频中文字幕| 亚洲视频国产视频| 欧美日韩国产中文精品字幕自在自线| 亚洲人成免费电影| 亚洲一区国产精品| 久久综合色88| 亚洲欧美一区二区三区在线| 亚洲国产中文字幕在线观看| 久久久午夜视频| 国模精品一区二区三区色天香| 91伊人影院在线播放| 欧美午夜片欧美片在线观看| 97婷婷大伊香蕉精品视频| 成人国产亚洲精品a区天堂华泰| 国产va免费精品高清在线观看| 国产精品视频大全| 精品久久国产精品| 日韩精品中文字幕在线播放| 日韩一级裸体免费视频| 久久视频在线播放| 国产美女扒开尿口久久久| 日韩在线观看网址| 日韩电影第一页| 免费91麻豆精品国产自产在线观看| 成人性生交xxxxx网站| 韩曰欧美视频免费观看| 69影院欧美专区视频| 欧美在线欧美在线| 欧美午夜女人视频在线| 午夜精品三级视频福利| 亚洲高清福利视频| 奇米一区二区三区四区久久| 日韩精品免费综合视频在线播放| 热门国产精品亚洲第一区在线| 国产精品一区二区久久精品| 国产精品国产三级国产aⅴ浪潮| 亚洲欧美国产日韩中文字幕| 伊人久久男人天堂| 97超碰蝌蚪网人人做人人爽| 日韩av电影手机在线观看| 久久九九免费视频| 国产精品久久视频| 国产福利精品av综合导导航| 久久久久久久久久久免费精品| 国产精品美腿一区在线看| 亚洲女人被黑人巨大进入al| 欧美精品亚州精品| 色播久久人人爽人人爽人人片视av| 亚洲乱码av中文一区二区| 国产精品日韩一区| 国产精品露脸av在线| 亚洲日本中文字幕免费在线不卡| 国产日韩欧美黄色| 国产va免费精品高清在线| 国产精品一区二区av影院萌芽| 精品av在线播放| 久久精品男人天堂| 国产精品久久久久久久久久小说| 久久中文字幕一区| 久久婷婷国产麻豆91天堂| 中文字幕日本精品| 久久久亚洲网站| 九九久久久久99精品| 久久久久久一区二区三区| 日韩精品福利在线| 91精品国产综合久久久久久蜜臀| 日韩三级影视基地| 精品久久香蕉国产线看观看gif| 成人综合网网址| 亚洲黄色免费三级| 国产精品揄拍500视频| 日韩av黄色在线观看| 欧美中文字幕在线| 中文字幕免费精品一区高清| 国产一区二区激情| 岛国视频午夜一区免费在线观看| 日韩一区二区在线视频| 国产精品 欧美在线| 欧美最顶级丰满的aⅴ艳星| 欧美日韩国产综合视频在线观看中文| www.午夜精品| 性欧美xxxx交| 色综合天天综合网国产成人网| 欧美在线性视频| 国产日韩在线一区| 欧美日韩国产中字| 色婷婷亚洲mv天堂mv在影片| 国产精品久久久久久久久久| 欧美一区在线直播| 欧美有码在线视频| 欧美最近摘花xxxx摘花| 国产亚洲视频中文字幕视频| 久久久女女女女999久久| 久久久国产一区二区三区| 久久精品国产96久久久香蕉| 久久精品91久久香蕉加勒比| 欧美限制级电影在线观看| 成人欧美一区二区三区黑人孕妇| 97在线看免费观看视频在线观看| 亚洲图片欧美午夜| 精品国产视频在线| 欧美成人全部免费| 亚洲网站在线观看| 国产日韩精品在线播放| 亚洲午夜色婷婷在线| 青草青草久热精品视频在线网站| 久久国产色av| 国产一区二区黑人欧美xxxx| 色哟哟入口国产精品| 亚洲成成品网站| 欧美精品一区二区免费| 欧美色videos| 日韩电影中文字幕在线观看| 久久久久久久久久国产| 亚洲综合小说区| 亚洲自拍偷拍色图| 一区二区三区在线播放欧美| 青青草成人在线| 日本精品视频在线| 亚洲国产精品va在看黑人| 欧美性猛交xxxx富婆弯腰| 欧美—级高清免费播放| 日韩欧美在线视频观看| www.久久色.com| 久久久久久久电影一区| 黄色精品一区二区| 欧美精品在线网站| 亚洲成人av片| 亚洲欧美在线磁力| 久久久成人av| 国产日本欧美一区二区三区| 一区三区二区视频| 国产精品视频一区国模私拍| 成人免费看吃奶视频网站| 成人444kkkk在线观看| 国产亚洲精品va在线观看| 国产99久久精品一区二区永久免费| 国产成人在线播放| 亚洲性线免费观看视频成熟| 久久国产精品久久久久久久久久| 亚洲精品日韩丝袜精品|