程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> vc中SendMessage自界說新聞函數用法實例

vc中SendMessage自界說新聞函數用法實例

編輯:關於C++

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法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved