アプリケーション間で、オリジナルのメッセージを送信するには、

RegisterWindowMessage関数でシステムで一意のメッセージを得る必要があります。

UINT RegisterWindowMessageW(
  [in] LPCWSTR lpString
);

lpStringは文字列へのポインターです。この文字列に従って、

システムは0xFFFF 0xC000範囲内のメッセージ識別子を返します。

 

〇プログラム例

Lボタンを押すとカウントが増えます。

 

  1. #include <windows.h>
  2.  
  3. static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  4. {
  5.     HDC hdc;
  6.     PAINTSTRUCT ps;
  7.     static UINT uMessage, uCount = 0;
  8.     TCHAR str[0xFF];
  9.  
  10.     switch (uMsg)
  11.     {
  12.     case WM_DESTROY:
  13.         PostQuitMessage(0);
  14.         return 0;
  15.  
  16.     case WM_CREATE:
  17.         ShowWindow(hWnd, SW_SHOW);
  18.         uMessage = RegisterWindowMessage(TEXT("TestMessage"));
  19.         return 0;
  20.  
  21.     case WM_LBUTTONDOWN: //マウスの左ボタンが押された
  22.         PostMessage(HWND_BROADCAST, uMessage, ++uCount, 0);
  23.         return 0;
  24.  
  25.     case WM_PAINT:
  26.         hdc = BeginPaint(hWnd, &ps);
  27.         wsprintf(str, TEXT("Count =%d"), uCount);
  28.         TextOut(hdc, 10, 10, str, lstrlen(str));
  29.         EndPaint(hWnd, &ps);
  30.         return 0;
  31.  
  32.     }
  33.     if (uMsg == uMessage) {
  34.         uCount = (UINT)wParam;
  35.         InvalidateRect(hWnd, NULL, TRUE);
  36.         return 0;
  37.     }
  38.     return DefWindowProc(hWnd, uMsg, wParam, lParam);
  39.  
  40. }
  41.  
  42. int APIENTRY wWinMain(
  43.     _In_ HINSTANCE hInstance,
  44.     _In_opt_ HINSTANCE hPrevInstance,
  45.     _In_ LPWSTR ipCmdLine,
  46.     _In_ int nCmdShow
  47. ) {
  48.  
  49.     WNDCLASSEXW wcex;
  50.  
  51.     wcex.cbSize = sizeof(WNDCLASSEX);
  52.  
  53.     wcex.style = CS_HREDRAW | CS_VREDRAW;
  54.     wcex.lpfnWndProc = WndProc;
  55.     wcex.cbClsExtra = 0;
  56.     wcex.cbWndExtra = 0;
  57.     wcex.hInstance = hInstance;
  58.     wcex.hIcon = NULL;
  59.     wcex.hCursor = NULL;
  60.     wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  61.     wcex.lpszMenuName = NULL;
  62.     wcex.lpszClassName = TEXT("TestWindow");
  63.     wcex.hIconSm = NULL;
  64.  
  65.     RegisterClassExW(&wcex);
  66.  
  67.     HWND hWnd = CreateWindowEx(0UL, TEXT("TestWindow"), TEXT("日本"), WS_OVERLAPPEDWINDOW,
  68.         CW_USEDEFAULT, 0, 400, 200, NULL, NULL, hInstance, NULL);
  69.  
  70.     if (!hWnd)
  71.     {
  72.         return FALSE;
  73.     }
  74.  
  75.     MSG msg;
  76.  
  77.     while (GetMessage(&msg, NULL, 0, 0))
  78.     {
  79.         DispatchMessage(&msg);
  80.     }
  81.  
  82.     return (int)msg.wParam;
  83. }

 

〇実行結果