vc中SendMessage自界說新聞函數用法實例。本站提示廣大學習愛好者:(vc中SendMessage自界說新聞函數用法實例)文章只能為提供參考,不一定能成為您想要的結果。以下是vc中SendMessage自界說新聞函數用法實例正文
本文實例講述了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
表現要做一些工作。
到這裡,能夠年夜家照樣抵消息種別有點隱約,不要擔憂,上面很快就講到。
我們發了一個新聞出去,那末吸收方要能辨認這個新聞是干甚麼,就是經由過程新聞種別來辨別,而且開端去做這個新聞對應要處置的工作。以下:
1、編寫一個工作:
我們在吸收窗體裡界說一個如許的工作(進程),
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;
2、讓吸收方曉得甚麼時刻做這個工作:
我們在
//{{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法式設計有所贊助。