• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

        C#開發(fā)WINDOWS應(yīng)用程序時消息的處理(C#學習筆記之二)

        C#開發(fā)WINDOWS應(yīng)用程序時消息的處理(C#學習筆記之二)

        更新時間:2022-05-16 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        作者:浙江省溫嶺市電信局 王駿


        WINDOWS應(yīng)用程序是靠消息驅(qū)動的,在VC中我們通過CLASSWIZARD可以為某窗口類添加消息處理函數(shù),CLASSWIZARD將為你添加消息映射,對于WINDOWS消息,生成的消息處理函數(shù)重載了基類的虛擬方法。而在C#中如何處理消息呢?本文針對VS.NET BETA1環(huán)境下的C#簡單地介紹WINDOWS消息以及自定義消息的處理方法。

        示例代碼下載 17K

        一、生成一個名為MSGApplication的工程
        工程的建立方法請參考:C#學習筆記之一

        二、處理WM_PAINT消息
        我們以WM_PAINT消息的處理為例,在C#中處理消息與MFC的消息處理是類似的,但更為簡單。MFC中需要使用DECLARE_MESSAGE_MAP來定義消息映射,在C#就不需要了。比如WM_PAINT消息,我們只要重載父類中的OnPaint虛擬方法即可(雖然在BETA1中重載父類虛擬方法的操作過程有點繁瑣),方法如下:
        在菜單View->Other Windows->Object Browser打開對象瀏覽窗口(或用CTRL+ALT+J打開),在我們的工程名下找到Form并選中,這時在右邊的窗口列出所有Form類的成員函數(shù),如圖所示:
        我們選中OnPaint(System.WinForms.PaintEventArgs)此時在下面會顯示完整的OnPaint函數(shù)protected void OnPaint ( System.WinForms.PaintEventArgs e )我們將這一行字符串Copy下來。打開Form1.cs進行代碼編輯,我們把剛才拷貝下來的函數(shù)定義復制到Form1類里面,并加上override關(guān)鍵字,此時我們便可以在里面添加我們的消息處理代碼了,請參考如下代碼段:


        protected override void OnPaint ( System.WinForms.PaintEventArgs e )
        {
        Font font = new Font("黑體",28);///定義字體:黑體,大小:28
        SolidBrush bluepen = new SolidBrush(Color.Blue);///創(chuàng)建藍色畫筆
        SolidBrush blackpen = new SolidBrush(Color.FromARGB(0xa0,0xa0,0xb0));///創(chuàng)建黑色畫筆
        e.Graphics.DrawString("VC知識庫",font,blackpen,65,25);///寫字符串
        e.Graphics.DrawString("VC知識庫",font,bluepen,61,21);///偏移4個象素用不同的顏色再寫一次,達到立體效果
        }

        對于其它消息的處理以及對其它父類虛擬函數(shù)的重載都可以采用同樣的方法。

        三、自定義消息的處理
        為了處理的方便,在這里我們將需要使用到的自定義消息封裝成一個類,類的添加過程如下:
        在ClassView中選中我們的工程MSGApplication,按下鼠標右鍵,在彈出菜單中選擇Add->Add Class,彈出Class Wizard,我們將類命名為WM,其余選項不便,確認完成類的添加。我們?yōu)閃M類添加兩個成員變量,見如下代碼:


        public class WM
        {
        public const int USER = 0x0400;
        public const int TEST1 = USER+1;
        }

        我們在Form1中添加一個按鈕,并為該按鈕添加事件處理代碼(假如您對這個過程不熟悉,請參考:C#學習筆記之一)
        向主視窗發(fā)送TEST1自定義消息,具體代碼如下:
        protected void button1_Click (object sender, System.EventArgs e)
        {
        SendMessage(WM.TEST1,100,200);
        }

        消息已經(jīng)發(fā)出了,在Form1中我們?nèi)绾螌υ撓⒆鞒鲰憫?yīng)呢?我們可以重載 DefWndProc方法。

        protected override void DefWndProc ( ref System.WinForms.Message m )
        {
        switch(m.msg)
        {
        case WM.TEST1:
        ///string與MFC中的CString的Format函數(shù)的使用方法有所不同
        string message = string.Format("收到消息!參數(shù)為:{0},{1}",m.wParam,m.lParam);
        MessageBox.Show(message);///顯示一個消息框
        break;
        default:
        base.DefWndProc(ref m);///調(diào)用基類函數(shù)處理非自定義消息。
        break;
        }
        }

        程序運行結(jié)果如圖

        當我們點發(fā)送消息按鈕,彈出消息框并顯示收到的參數(shù)。

        后記:可以預(yù)料在VS.NET BETA1的后繼版本中對上述過程的操作會有很大改變,但原理是一致的。讓我們期待更完美的C#展現(xiàn)在我們面前。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 在线播放免费人成视频网站 | 亚洲日韩在线观看免费视频| 亚洲制服丝袜精品久久| 91精品国产免费久久国语麻豆| 亚洲成A人片777777| 99视频免费在线观看| 亚洲国产精品一区第二页| 国产啪精品视频网站免费尤物| 亚洲国产精品va在线播放| 大地资源在线资源免费观看| 亚洲AV无码国产精品色午友在线| 国产一级淫片a免费播放口| 亚洲国产AV一区二区三区四区 | 精品国产日韩亚洲一区在线| 又粗又大又猛又爽免费视频| 日日摸夜夜添夜夜免费视频 | 亚洲毛片无码专区亚洲乱| 免费观看无遮挡www的视频| 精品久久久久久亚洲精品| 免费看少妇作爱视频| 午夜成人无码福利免费视频| 国产亚洲真人做受在线观看| 日韩精品极品视频在线观看免费 | 亚洲高清中文字幕综合网| 男女做羞羞的事视频免费观看无遮挡| 亚洲av乱码一区二区三区香蕉| 国产精品成人四虎免费视频| 成人网站免费大全日韩国产 | 中文字幕无码视频手机免费看| 久久精品国产精品亚洲精品| 最近最新高清免费中文字幕| 亚洲一本到无码av中文字幕| 亚洲?V无码成人精品区日韩| 小草在线看片免费人成视久网| 亚洲日韩国产精品第一页一区| 美女被羞羞网站免费下载| 成全视频在线观看免费高清动漫视频下载 | 最近新韩国日本免费观看| 亚洲色偷偷综合亚洲av78| 国产gv天堂亚洲国产gv刚刚碰| 久久九九兔免费精品6|