關於VC++中,兩種自定義訊息的傳送與接收的方法實現進行說明。 (轉)
說明:
以下用一個自創的對話方塊類(MyMessageDlg)向檢視類(MessageTestView)
傳送自定義訊息為例,說明這兩種不同方法的自定義訊息的
總結:
訊息傳遞的方法一:使用ON_MESSAGE
使用ON_MESSAGE響應訊息,必須配合定義訊息#define WM_MY_MESSAGE (WM_USER+100)
對於傳送訊息者-MyMessageDlg,
在其MyMessageDlg.h中,定義#define WM_MY_MESSAGE (WM_USER+100)
在其MyMessageDlg.cpp中要先新增:#include "MainFrm.h"
因為使用了CMainFrame*定義。
並且要有測試訊息的:
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先透過獲取當前指標
CView * active = pMF->GetActiveView();//才能獲取當前視類指標
if(active != NULL) //獲取了當前視類指標才能傳送訊息
active->PostMessage(WM_MY_MESSAGE,0,0); //使用PostMessage傳送訊息
}
對於訊息的接受者-MessageTestView,
在其MessageTestView.h中,也要定義#define WM_MY_MESSAGE (WM_USER+100)
並定義訊息對映函式-OnMyMessage()
protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
在其MessageTestView.cpp中,
先要宣告響應訊息:
BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
再新增訊息響應的函式實現:
LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
訊息傳遞的方法二:使用ON_REGISTERED_MESSAGE
使用ON_REGISTERED_MESSAGE註冊訊息,必須配合
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
對於訊息的傳送者-MyMessageDlg,
在其MyMessageDlg.h中,只要
定義static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
就可以了。
在其MyMessageDlg.cpp中要先新增:#include "MainFrm.h"
因為使用了CMainFrame*定義物件。
並且要有測試訊息的函式:
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先透過獲取當前框架指標
CView * active = pMF->GetActiveView();//才能獲取當前視類指標
if(active != NULL) //獲取了當前視類指標才能傳送訊息
active->PostMessage(WM_MY_MESSAGE,0,0); //使用PostMessage傳送訊息
}
對於訊息的接收者-MessageTestView,
在其MessageTestView.h中不要定義
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
應該把這個定義放到MessageTestView.cpp中,要不會出現: redefinition
在其MessageTestView.h中只要定義訊息對映函式
protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
在其MessageTestView.cpp中,先定義
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
接著註冊訊息:
BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
最後新增訊息響應的函式實現:
LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
----------------------------------------------------------------
比較兩種方法,只是略有不同。但也要小心謹慎,以免出現接收不到訊息的情況。
-------------------------------------------------------------------
其他注意事項:
傳送訊息的-MyMessageDlg.cpp前也要定義
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
接受訊息的-MessageTestView.cpp前也要定義
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
RegisterWindowMessage("Message")中""的內容是什麼不重要,寫什麼都可以,單必須
傳送者與接受者是一樣的內容,例如:"Message"
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-977221/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WIN32傳送自定義訊息Win32
- 我用這種方法在 Spring 中實現訊息的傳送和消費Spring
- RabbitMQ實現延時訊息的兩種方法MQ
- 關於微信分享自定義標題,說明,圖示基於PHP的功能實現PHP
- 關於Numba的執行緒實現的說明執行緒
- RocketMQ中Producer訊息的傳送MQ
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- SOCKET實現廣播(BoardCast)的傳送和接收 (轉)AST
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 用程式碼理解ObjC中的傳送訊息和訊息轉發OBJ
- WINDOWS訊息說明 (轉)Windows
- 自定義訊息獲取訊息(轉)
- Android 基於Netty的訊息推送方案之字串的接收和傳送(三)AndroidNetty字串
- 微信小程式 傳送模板訊息的功能實現微信小程式
- iOS 訊息傳送與轉發詳解iOS
- 網路核心之TCP是如何傳送和接收訊息的TCP
- iOS 環信 EaseUI 的使用一:可傳送類似名片自定義的訊息iOSUI
- Jquery實現自定義訊息彈窗jQuery
- Udp接收和傳送的多執行緒進行(新手)UDP執行緒
- 關於多執行緒的兩種實現方式執行緒
- 基於 WebRTC 實現自定義編碼解析度傳送Web
- 關於Java中各種修飾符與訪問修飾符的說明 (轉)Java
- VC增加自定義訊息 (轉)
- Rocket MQ傳送訊息的三種方式初析MQ
- 自定義訊息和對訊息的理解
- 形形色色的自定義訊息(上) (轉)
- 形形色色的自定義訊息(下) (轉)
- Laravel 實現 Kafka 訊息推送與接收處理LaravelKafka
- C#實現Web檔案上傳的兩種方法(轉)C#Web
- 一張圖進階 RocketMQ - 訊息傳送MQ
- 微信公眾號如何實現模板訊息傳送的功能
- VC++訊息對映的思考 (轉)C++
- PHP基於Redis訊息佇列實現的訊息推送的方法PHPRedis佇列
- 從原始碼看 ObjC 中訊息的傳送原始碼OBJ
- 聊聊自定義實現的SPI如何與spring進行整合Spring
- 如何在優雅地Spring 中實現訊息的傳送和消費Spring
- RocketMQ(6)---傳送普通訊息(三種方式)MQ
- [轉]MQ詳解以及各種訊息中介軟體說明MQ