C++ MFC深入詳解之----線程通過PostMessage發送消息(自定義消息)

我們舉一個例子:

點擊按鈕創建線程,並把字符串顯示在編輯框中

按鈕ID:IDC_BUT_CreateThread

Edit編輯框ID:IDC_ShowStr

 

首先第一步:(第一步都是在xxxxDlg.h文件中)

1.在 xxxxDlg.h文件中定義消息(xxxxDlg.h中xxxx是創建時自己起的名字)

添加:#define WM_MY_MESSAGE (WM_USER+100)  

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WM_MY_MESSAGE (WM_USER+100)   

2.定義消息處理函數

添加:afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CTestPostMessage_3Dlg)

//在此處加入

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 

//}}AFX_MSG
DECLARE_MESSAGE_MAP()

 

第二步:在xxxxDlg.cpp中

1.添加消息映射

在BEGIN_MESSAGE_MAP(xxxxDlg, CDialog)   和     END_MESSAGE_MAP()  中間

添加:ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

BEGIN_MESSAGE_MAP(xxxxDlg, CDialog)
//{{AFX_MSG_MAP(xxxxDlg)
ON_WM_SYSCOMMAND()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) 
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUT_CreateThread, OnButtonSendMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

2.實現消息處理函數

要實現你消息映射對應的函數這裏叫OnMyMessage

LRESULT   你的類名::OnMyMessage(WPARAM wParam, LPARAM lParam)

{ 
// TODO: 處理用戶自定義消息 
//... 
CString str = (LPCTSTR)lParam;
SetWindowText(IDC_ShowStr,str);
 delete str;
return 0; 
}

這樣在創建線程的時候將主窗口句柄作爲參數傳入線程,就可以用 PostMessage傳遞消息了。

 

鼠標事件:

在剛纔的Button添加響應事件,寫入如下代碼

void xxxxDlg::OnButtonSendMsg() 
{
    CString *p_str=new CString("Hello EveryBody");
    CWnd *pWnd=CWnd::FindWindow(NULL,"xxxx(你的文件名字)");//獲取目的窗口對象
         ::PostMessage(*pWnd,WM_MY_MESSAGE,0,(LPARAM)(LPCTSTR)p_str);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章