vc中SendMessage自定義消息函數(shù)用法實(shí)例
本文實(shí)例講述了vc中SendMessage自定義消息函數(shù)用法,分享給大家供大家參考。具體如下:
SendMessage的基本結(jié)構(gòu)如下:
HWND hWnd, //消息傳遞的目標(biāo)窗口或線程的句柄。
UINT Msg, //消息類別(這里可以是一些系統(tǒng)消息,也可以是自己定義,下文具體介紹,)
WPARAM wParam, //參數(shù)1 (WPARAM 其實(shí)是與UINT是同種類型的,
//在vc編譯器中右鍵有個(gè)“轉(zhuǎn)到WPARAM的定義”的選項(xiàng)可以查看。
LPARAM lParam); //參數(shù)2
其中一些參數(shù)的由來如下:
//typedef unsigned int UINT;
//typedef UINT WPARAM;
//typedef LONG LPARAM;
//typedef LONG LRESULT;
例如可以用以下語句:
這里我發(fā)送的消息是本窗體接收的,所以句柄用:this->m_hWnd
這里的消息類別WM_MY_DOSOME就是我自定義的,
在接收消息的窗體或線程所在的頭文件里:
當(dāng)然你還可以定義更多如:
表示要做一些事情。
到這里,可能大家還是對消息類別有點(diǎn)模糊,不要擔(dān)心,下面很快就講到。
我們發(fā)了一個(gè)消息出去,那么接收方要能識別這個(gè)消息是干什么,就是通過消息類別來區(qū)分,并且開始去做這個(gè)消息對應(yīng)要處理的事情。如下:
一、編寫一個(gè)事情:
我們在接收窗體里定義一個(gè)這樣的事情(過程),
{
MessageBox("收到消息了,我要開始做一些事情了。","收到",MB_OK);
//可以運(yùn)用iParam1,iParam2 來做一些事情。
return 0;
}
這個(gè)事情有3點(diǎn)大家要注意,非常重要:
1. 使用了afx_msg,并且要將afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)
改寫到頭文件的
//{{AFX_MSG
//。。。改寫到這里,顏色會變成灰的。這一點(diǎn)非常重要。
//}}AFX_MSG
2. 參數(shù)有2個(gè),WPARAM iParam1,LPARAM iParam2,哪怕沒有東西傳進(jìn)來也要寫,不然會吃苦頭的,vc里不會提醒你少寫了一個(gè),
但一些莫名奇妙的事情會發(fā)生。
3. 類型用 LRESULT,完了要return 0;
二、讓接收方知道什么時(shí)候做這個(gè)事情:
我們在
//。。。這里寫上
ON_MESSAGE(WM_MY_DOSOME,DoSomeThing)
//如果還有其他消息就再寫一個(gè)
ON_MESSAGE(WM_DOOTHER,DoOther)
//}}AFX_MSG_MAP
到這里,當(dāng)你用SendMessage,發(fā)了一個(gè)WM_MY_DOSOME類型的消息過來的時(shí)候,接收方就會去做DoSomeThing(WPARAM iParam1,LPARAM iParam2)
發(fā)了一個(gè)WM_DOOTHER類型的消息過來的時(shí)候,接收方就會去做DoOther(WPARAM iParam1,LPARAM iParam2)當(dāng)然,這里DoOther我還沒有定義。
這樣就是一個(gè)完整的消息發(fā)送與接受過程,這里沒有詳細(xì)講參數(shù),iParam1,因?yàn)檫€沒有用到很復(fù)雜的情況,
在頭文件里:
afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定義消息的處理函數(shù)聲明
在.cpp文件里:
//利用ON_MESSAGE()宏在自定義消息與其處理函數(shù)間建立映射關(guān)系
void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
//從lParam中取出CString對象的指針,并將字符串內(nèi)容在IDC_MSGEDIT中顯示出來
{
CString *str;
str=(CString *)lParam;
SetDlgItemText(IDC_EDIT,*str);
}
按下按鈕發(fā)送消息
{
CString str= "自定義消息被觸發(fā)了!";
SendMessage(WM_MYMSG, 0, (LPARAM) &str);
//給ModelessDlg自己發(fā)一個(gè)自定義的消息
}
希望本文所述對大家的VC程序設(shè)計(jì)有所幫助。
相關(guān)文章
C語言模擬實(shí)現(xiàn)C++的繼承與多態(tài)示例
本篇文章主要介紹了C語言模擬實(shí)現(xiàn)C++的繼承與多態(tài)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05更優(yōu)雅的C++字符串格式化實(shí)現(xiàn)方法詳解
在用C++編寫代碼時(shí),經(jīng)常需要用到字符串拼接及格式化,尤其是在拼寫sql語句時(shí)。所以本文為大家介紹了更優(yōu)雅的C++字符串格式化實(shí)現(xiàn)方法,希望對大家有所幫助2023-04-04C語言深入探究自定義類型之結(jié)構(gòu)體與枚舉及聯(lián)合
今天我們來學(xué)習(xí)一下自定義類型,自定義類型包括結(jié)構(gòu)體、枚舉、聯(lián)合體,小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考2022-05-05C語言中用于修改文件的存取時(shí)間的函數(shù)使用
這篇文章主要介紹了C語言中用于修改文件的存取時(shí)間的函數(shù)使用,分別為utime()函數(shù)和utimes()函數(shù)的使用,需要的朋友可以參考下2015-09-09c++實(shí)現(xiàn)超簡單的貪吃蛇游戲?qū)嵗榻B
大家好,本篇文章主要講的是c++實(shí)現(xiàn)超簡單的貪吃蛇游戲?qū)嵗榻B,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12