1. 程式人生 > >Windows程式和訊息機制(三):訊息與程序間通訊

Windows程式和訊息機制(三):訊息與程序間通訊

自定義訊息與程序間通訊

視窗程式可以接收自定義的訊息型別,前提是通訊的程序聲明瞭這種訊息型別,宣告的方法很簡單,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傳送訊息所需要的一切。