IPC 方式眾多(共享記憶體、管道、Socket 等),訊息機制雖資料量小,但實作簡單、介面清晰,極適合「上層主控下發指令、底層回報狀態」的低頻互動場景。
PostMessage:投遞到佇列,不等待處理(非同步)SendMessage:直接呼叫視窗程序,阻塞直到處理完畢(同步)Sender#define WM_COMM (WM_USER + 100)void CSenderView::OnSendComm1() {
CWnd* pWnd = CWnd::FindWindow(NULL, _T("Receiver"));
if(pWnd) pWnd->SendMessage(WM_COMM, 0, 0);
}
void CSenderView::OnSendComm2() {
CWnd* pWnd = CWnd::FindWindow(NULL, _T("Receiver"));
if(pWnd) pWnd->SendMessage(WM_COMM, 0, 1);
}
void CSenderView::OnSendComm3() {
CWnd* pWnd = CWnd::FindWindow(NULL, _T("Receiver"));
if(pWnd) pWnd->SendMessage(WM_COMM, 1, 0);
}
ReceiverInitInstance 末尾設定視窗標題:m_pMainWnd->SetWindowText(_T("Receiver"));WM_COMMON_MESSAGE(WM_COMM, OnSendMsg)void CMainFrame::OnSendMsg(WPARAM wParam, LPARAM lParam) {
if(wParam==0 && lParam==0) AfxMessageBox(_T("收到命令一"));
else if(wParam==0 && lParam==1) AfxMessageBox(_T("收到命令二"));
else if(wParam==1 && lParam==0) AfxMessageBox(_T("收到命令三"));
}
範例使用 SendMessage,主控程式會阻塞直到模態對話框關閉。若不希望阻塞,改用 PostMessage 即可。視業務需求決定:指令下發確認用同步,狀態通報用非同步。
LPARAM 傳遞指標(需共享記憶體或序列化)RegisterWindowMessage 取得系統唯一訊息 ID,避免衝突訊息式 IPC 以「契約(wParam/lParam 定義)」為介面,上下層解耦明確,是中小型專案快速落地的不二之選。