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發送消息所需要的一切。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章