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
表現要做一些工作。
到這裡,能夠年夜家照樣抵消息種別有點隱約,不要擔憂,我上面很快就講到。
我們發了一個新聞出去,那末吸收方要能辨認這個新聞是干甚麼,就是經由過程新聞種別來辨別,
而且開端去做這個新聞對應要處置的工作。以下:
一:編寫一個工作:
我們在吸收窗體裡界說一個如許的工作(進程),
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中顯示出來
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。