欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C#中在應用程序和DLL使用消息
在C#中采用的是事件驅動(dòng)方式,但在我們使用的過(guò)程中,有時(shí)候通過(guò)調用系統原有的消息,處理起來(lái)會(huì )比較簡(jiǎn)單一些,特別是在處理與DLL文件的交互時(shí),的確是非常的方便。
   在C#中使用自定義消息
     在C#中使用自定義消息非常簡(jiǎn)單,只需要下面幾個(gè)簡(jiǎn)單的步驟就可以了:
1、  定義消息
定義消息的方法和VC中定義消息有一點(diǎn)點(diǎn)不同
比如在VC中申明一個(gè)自定義消息:
#define WM_TEST WM_USER + 101
而在c#中消息需要定義成windows系統中的原始的16進(jìn)制數字,比如自定義消息
public const int USER = 0x0400;
那么我們在VC中申明的自定義消息,在C#中就可以做對應的聲明:
         public const int WM_TEST = USER+101;
     
2、  發(fā)送消息
消息發(fā)送是通過(guò)windows提供的API函數SendMessage來(lái)實(shí)現的,它的原型定義:        [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、  消息接收
消息發(fā)出之后,在Form中如何接收呢?我們可以重載DefWinproc函數來(lái)接收消息。
protected override void DefWndProc ( ref System.Windows.Forms.Message m )
        {
            switch(m.Msg)
            {
                case Message.WM_TEST: //處理消息
                break;
                default:
                base.DefWndProc(ref m);//調用基類(lèi)函數處理非自定義消息。
break;
            }
}
在C#中使用系統消息
我們以WM_PAINT消息的處理為例,在C#中處理消息與MFC的消息處理是類(lèi)似的,但更為簡(jiǎn)單。MFC中需要使用DECLARE_MESSAGE_MAP來(lái)定義消息映射,在C#就不需要了。比如WM_PAINT消息,我們只要重載父類(lèi)中的OnPaint虛擬方法即可,方法如下:
在菜單View->Other Windows->Object Browser打開(kāi)對象瀏覽窗口(或用CTRL+ALT+J打開(kāi)),在我們的工程名下找到Form并選中,這時(shí)在右邊的窗口列出所有Form類(lèi)的成員函數,如圖所示:

我們選中OnPaint(System.WinForms.PaintEventArgs)此時(shí)在下面會(huì )顯示完整的OnPaint函數protected void OnPaint ( System.WinForms.PaintEventArgs e )我們將這一行字符串Copy下來(lái)。打開(kāi)Form1.cs進(jìn)行代碼編輯,我們把剛才拷貝下來(lái)的函數定義復制到Form1類(lèi)里面,并加上override關(guān)鍵字,此時(shí)我們便可以在里面添加我們的消息處理代碼了,請參考如下代碼段:
protected override void OnPaint (System.Windows.Forms.PaintEventArgs e  )
{
     Font font = new Font("黑體",28);///定義字體:黑體,大?。?8
     SolidBrush bluepen = new SolidBrush(Color.Blue);///創(chuàng )建藍色畫(huà)筆
     SolidBrush blackpen = new SolidBrush(Color.FromARGB(0xa0,0xa0,0xb0));///創(chuàng )建黑色畫(huà)筆
     e.Graphics.DrawString("VC知識庫",font,blackpen,65,25);///寫(xiě)字符串
     e.Graphics.DrawString("VC知識庫",font,bluepen,61,21);///偏移4個(gè)象素用不同的顏色再寫(xiě)一次,達到立體效果
}
示例應用
1、  定義消息
我們在工程中添加一個(gè)Message類(lèi)用來(lái)定義消息。然后添加了三個(gè)成員變量,其中USER為自定義消息的初始值,相當與MFC中的WM_USER。WM_TEST為自定義的用來(lái)響應應用程序的消息,WM_MSG為自定義的用來(lái)響應DLL傳遞過(guò)來(lái)的消息。如何在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文件中申明:
//申明發(fā)送消息函數
        [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中啟動(dòng)消息函數
        [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);
///創(chuàng )建藍色畫(huà)筆
              SolidBrush bluepen = new SolidBrush(Color.Blue);
///創(chuàng )建黑色畫(huà)筆             
SolidBrush blackpen = new SolidBrush(Color.FromArgb(0xa0,0xa0,0xb0));
///寫(xiě)字符串
e.Graphics.DrawString("VC知識庫",font,blackpen,65,25);
///偏移4個(gè)象素用不同的顏色再寫(xiě)一次,達到立體效果
             e.Graphics.DrawString("VC知識庫",font,bluepen,61,21);        
}
4、   觸發(fā)自定義消息

        //測試應用程序消息
         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("收到從應用程序發(fā)出的消息!參數為:{0},{1}",m.WParam,m.LParam);
                    MessageBox.Show(message);///顯示一個(gè)消息框
                    break;
                case Message.WM_MSG:
                    message = string.Format("收到從DLL發(fā)出的消息!參數
為:{0},{1}",m.WParam,m.LParam);
                    MessageBox.Show(message);///顯示一個(gè)消息框
                    break;
                default:
                    base.DefWndProc(ref m);//調用基類(lèi)函數處理非自定義消息。

                    break;
             }
         }
  程序運行結果:
當我們點(diǎn)擊測試DLL消息時(shí),彈出消息框顯示收到消息的參數,窗口也會(huì )調用WM_PAIN函數對窗口進(jìn)行重新繪制。


說(shuō)明:本文是參考《C#開(kāi)發(fā)WINDOWS應用程序時(shí)消息的處理》
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
調用dll時(shí)會(huì )用到很多windows自定義的常量,哪里有他們的詳細介紹?
VC添加自定義消息
Windows 2000/XP中對窗口進(jìn)行透明化 - VC知識庫文章
vc6.0添加自定義用戶(hù)消息的基本過(guò)程
vc中用SendMessage自定義消息傳遞
VC自定義消息 傳參字符串
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久