Windows程式和訊息機制(三):訊息與程序間通訊
阿新 • • 發佈:2018-11-27
自定義訊息與程序間通訊
視窗程式可以接收自定義的訊息型別,前提是通訊的程序聲明瞭這種訊息型別,宣告的方法很簡單,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傳送訊息所需要的一切。