a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

vc中SendMessage自定義消息函數用法實例

2020-01-26 15:12:49
字體:
來源:轉載
供稿:網友

本文實例講述了vc中SendMessage自定義消息函數用法,分享給大家供大家參考。具體如下:

SendMessage的基本結構如下:

復制代碼 代碼如下:
SendMessage(
    HWND hWnd,  //消息傳遞的目標窗口或線程的句柄。
    UINT Msg, //消息類別(這里可以是一些系統消息,也可以是自己定義,下文具體介紹,)
    WPARAM wParam, //參數1 (WPARAM 其實是與UINT是同種類型的,
  //在vc編譯器中右鍵有個“轉到WPARAM的定義”的選項可以查看。
    LPARAM lParam); //參數2

其中一些參數的由來如下:

//typedef unsigned int UINT;
//typedef UINT WPARAM;
//typedef LONG LPARAM;
//typedef LONG LRESULT;

例如可以用以下語句:

復制代碼 代碼如下:
::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);

這里我發送的消息是本窗體接收的,所以句柄用:this->m_hWnd
這里的消息類別WM_MY_DOSOME就是我自定義的,
在接收消息的窗體或線程所在的頭文件里:

復制代碼 代碼如下:
#define WM_MY_DOSOME WM_USER+1 // do something

當然你還可以定義更多如:
復制代碼 代碼如下:
#define WM_DOOTHER WM_USER+2 // do other

表示要做一些事情。

到這里,可能大家還是對消息類別有點模糊,不要擔心,下面很快就講到。
我們發了一個消息出去,那么接收方要能識別這個消息是干什么,就是通過消息類別來區分,并且開始去做這個消息對應要處理的事情。如下:

一、編寫一個事情:
我們在接收窗體里定義一個這樣的事情(過程),

復制代碼 代碼如下:
afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)
{
 MessageBox("收到消息了,我要開始做一些事情了。","收到",MB_OK);
 //可以運用iParam1,iParam2 來做一些事情。
 return 0;
}

這個事情有3點大家要注意,非常重要:

1. 使用了afx_msg,并且要將afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)
改寫到頭文件的
//{{AFX_MSG
//。。。改寫到這里,顏色會變成灰的。這一點非常重要。
//}}AFX_MSG
2. 參數有2個,WPARAM iParam1,LPARAM iParam2,哪怕沒有東西傳進來也要寫,不然會吃苦頭的,vc里不會提醒你少寫了一個,
但一些莫名奇妙的事情會發生。
3. 類型用 LRESULT,完了要return 0;

二、讓接收方知道什么時候做這個事情:
我們在

復制代碼 代碼如下:
//{{AFX_MSG_MAP
//。。。這里寫上
ON_MESSAGE(WM_MY_DOSOME,DoSomeThing)
//如果還有其他消息就再寫一個
ON_MESSAGE(WM_DOOTHER,DoOther)
//}}AFX_MSG_MAP

到這里,當你用SendMessage,發了一個WM_MY_DOSOME類型的消息過來的時候,接收方就會去做DoSomeThing(WPARAM iParam1,LPARAM iParam2)
發了一個WM_DOOTHER類型的消息過來的時候,接收方就會去做DoOther(WPARAM iParam1,LPARAM iParam2)當然,這里DoOther我還沒有定義。

這樣就是一個完整的消息發送與接受過程,這里沒有詳細講參數,iParam1,因為還沒有用到很復雜的情況,

在頭文件里:

復制代碼 代碼如下:
#define WM_MYMSG  WM_USER+5 //自定義一個消息

afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定義消息的處理函數聲明

在.cpp文件里:

復制代碼 代碼如下:
ON_MESSAGE(WM_MYMSG, OnMyMessage)
//利用ON_MESSAGE()宏在自定義消息與其處理函數間建立映射關系

void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
//從lParam中取出CString對象的指針,并將字符串內容在IDC_MSGEDIT中顯示出來
{

    CString *str;
    str=(CString *)lParam;

    SetDlgItemText(IDC_EDIT,*str);
}

按下按鈕發送消息

復制代碼 代碼如下:
void CModelessDlg::OnMsgBTN()
{
 CString str= "自定義消息被觸發了!";
 SendMessage(WM_MYMSG, 0, (LPARAM) &str);
 //給ModelessDlg自己發一個自定義的消息
}

希望本文所述對大家的VC程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 亚洲国产精久久久久久久 | 在线亚洲激情 | 久久久精品一区二区三区 | 欧美喷潮久久久xxxxx | 久久久国产一区二区三区 | 久久精品免费 | 欧美一级艳片视频免费观看 | 日本精品久久 | 亚洲一区欧美一区 | 成人国产精品一区 | 欧美h在线观看 | 毛片网站在线观看 | 国产小视频一区二区 | 日韩字幕一区 | 青青草一区 | 一区二区中文字幕 | 国产精品一区二区三区四区 | 日本成年人免费网站 | 国产精品毛片无码 | 免费不卡视频 | 人人爽在线 | 欧美精品在线播放 | 太平公主一级艳史播放高清 | 欧美久久一区二区 | 久久水蜜桃| 精品国产乱码久久久久久1区2区 | 男人亚洲天堂网 | 国产羞羞视频在线观看 | 涩涩视频观看 | 精品伦精品一区二区三区视频 | 亚洲毛片网站 | 欧美视频在线播放 | 久久99深爱久久99精品 | 九九99九九精彩网站 | 仙人掌旅馆在线观看 | 欧美视频免费 | 成人精品久久 | 欧美男人天堂 | 麻豆一区 | 精品国产一区二区三区av片 | 一区二区三区四区国产 |