行程間通訊 (IPC) 方式眾多:共享記憶體、管道、郵槽、Socket 等。訊息機制雖資料量小、資訊有限,但實作簡單、靈活,適合主控程式與工作程式之間的命令/回應場景。
MSG 結構包含:hwnd (目標視窗)、message (訊息編號)、wParam/lParam (參數)、time、pt (游標位置)。
Sender#define WM_COMM WM_USER+100void 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_COMMBEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_MESSAGE(WM_COMM, OnSendMsg)
END_MESSAGE_MAP()
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("主控程式發送命令三!"));
}
實際專案應根據需求選擇,並設計完善的協議 (wParam/lParam 組合、自訂結構體配合 WM_COPYDATA)。
訊息機制提供清晰的層級介面,上下層僅透過訊息協議通訊,降低耦合度。配合 FindWindow 或更穩健的進程列舉方式取得目標視窗控制代碼,可構建輕量級 IPC 系統。