Tuesday, May 15, 2007

接收broadcast訊息

how to broadcast:

#define WM_HOLDKEY_ON (WM_USER+3041)
....
void InitThread()
{
WNDCLASS wndclass;
HANDLE hEvent[n]={0};
DWORD dwStatus;

hEvent[0] = CreateEvent(NULL, FALSE, FALSE, kHoldKeyEventName);
....
while(TRUE)
{
dwStatus = WaitForMultipleObjects(n, hEvent, FALSE, INFINITE);

switch(dwStatus)
{
case (WAIT_OBJECT_0 + 0):
SendMessage(HWND_BROADCAST,WM_HOLDKEY_ON,0,0);
break;
....}
}
}

catch broadcast message using MFC:

#define WM_HOLDKEY_ON (WM_USER+3041)
....
BEGIN_MESSAGE_MAP(CCatchBroadcast, CDialog)
ON_MESSAGE(WM_HOLDKEY_ON, OnHOLDKEY_ON)
END_MESSAGE_MAP()

....
LRESULT CCatchBroadcast::OnHOLDKEY_ON(WPARAM wParam, LPARAM lParam)
{
//do whatever
return 0;
}

using WIN API(not MFC):

#define WM_HOLDKEY_ON (WM_USER+3041)
....
LRESULT CALLBACK xxxMainProc (HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch (iMessage)
{
....
case WM_HOLDKEY_ON:
//do whatever
break;}
return FALSE;
}


The WM_USER constant is used by applications to help define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.
WM_HOLDKEY_ON, 3041 是自己定義的,建立溝通可用這個方式傳送及接收自己定義的訊息

MFC message map 簡單明瞭的解釋處理訊息的三種方式~ 只有MFC的寫法

0 comments: