自定義消息與進程間通信
窗口程序可以接收自定義的消息類型,前提是通信的進程聲明瞭這種消息類型,聲明的方法很簡單,WM_USER加一個值就可以了,一般加的值從0x400開始,其他的值已經被系統使用了。
實現一個完整的自定義消息需要進行以下步驟:
1.聲明自定義消息類型:
WM_UMSG+0x400
2.添加消息映射:
BEGIN_MESSAGE_MAP(CUserWMDlg,CDialog)
…
ON_MESSAGE(WM_UMSG,RevcMsg)
…
END_MESSAGE_MAP()
3.實現自定義響應函數:
VOID
CUserWMDlg::RecvMsg(WPARAM wParam,LPARAM lParam)
{
…
}
WM_COPYDATA與進程間通信
這種通信方式跟自定義消息類似,只不過它是系統定義的。由於使用SendMessage()函數在發送消息時的阻塞機制,傳遞的消息不宜過多。
SendMessage((HWND)hWnd,WM_COPYDATA,(WPARAM)wParam,(LPARAM)lParam);
第一個參數是接收消息的窗口句柄,第二個參數填上WM_COPYDATA,第三個參數是發送消息的窗口句柄,可以爲空,第四個參數需要傳遞下面的結構體:
typedef struct tagCOPYDATASTRUCT{
ULONG_PTR dwData;// 自定義的數據,一般爲0
DWORD cbData;// lpData指向的數據大小
PVOID lpData;// 指向數據的指針
}COPYDATASTRUCT,*PCOPYDATASTRUCT;
如果是MFC程序,直接在要進行通信的窗口中添加WM_COPYDATA消息,程序會自動生成WM_COPYDATA發送消息所需要的一切。