PostMessage是個很方便且好玩的東西,能夠讓兩支程式溝通
首先要定義兩者之間的通訊規格 就像開車一樣
左邊方向燈為向左轉 右邊方向燈為向右轉
再來要定義一個message map 以判斷接收到的訊息要用何種function來處理
接下來是一段應用的程式碼,當發送端送訊息到接收端時,接收端根據PostMessage
內容來決定使用HELLO() 或者 HI()
//---接收端----
STEP1 將接收端的程式標題定為一個名稱 這邊用TEST表示
SetWindowText(_T("TEST"));
STEP2 定義溝通規格
#define WM_FUNCTION WM_USER+1
(WM_FUNCTION在這程式的角色為像是通信流程中的"訊息")
STEP3 定義一個Message map
ON_MESSAGE(WM_FUNCTIONT,Select)
(定義當TEST接收到WM_FUNCTION這"訊息"時,利用Select()這個函數處理
記得要放在 DoDataExchange()裡頭,BEGIN_MESSAGE_MAP()部分)
STEP4 設置一個列舉型態
enum{HELLO,HI};
(列舉型態 預設第一個為0 第二個為1 以此類推)
STEP5 撰寫一個判斷PostMessage訊息的function
LRESULT CtestDlg::Select(WPARAM wparam, LPARAM lparam)
{
int m_iSelect = (int)wparam;//將wparam轉為int型態後放入m_iSelect
switch (m_iSelect)
{
case HELLO:
HELLO();
break;
case HI:
HI();
break;
}
return S_OK;
}
//-----發送端---
做完接收端的step2~4後,撰寫一個function來傳送訊息
void CsendDlg::OnBnClickedSend()
{
::PostMessage(::FindWindow(NULL,_T("TEST")),WM_FUNCTION, HELLO, 0);
}
Postmessage的格式請參考MSDN的內容,這邊不做詳細敘述
::FindWindow(NULL,_T("TEST"))即為要將訊息傳送到的裝置
WM_FUNCTION為傳送的訊息
HELLO為之前定義列舉型態中的數值 (WPARAM)
由於lparam的部分在這用不到 所以設為0
如此一來即可完成一支PostMessage應用的小程式了
沒有留言:
張貼留言