スポンサーリンク

WM_SIZE vs WM_SIZING

Win32APIのWM_SIZEメッセージとWM_SIZINGメッセージ。

WM_SIZINGはサイズ変更中に、WM_SIZEはサイズ変更後に送られます・・・。

とはいうものの、発行されるタイミングより遙かに大きな違いがあります。というか全く別物です。

WM_SIZEメッセージ

値の取得方法と内容

lParam & 0xFFFFクライアント領域の幅
(lParam >> 16) & 0xFFFFクライアント領域の高さ

この値の別の取得方法

RECT rect;
GetClientRect(hWnd,&rect);

WM_SIZINGメッセージ

値の取得方法と内容

RECT* prect = (RECT*)lParam;

prect->leftウィンドウの左の座標
prect->topウィンドウの上の座標
prect->rightウィンドウの右の座標
prect->bottomウィンドウの下の座標

この値の別の取得方法

RECT rect;
GetWindowRect(hWnd,&rect);

サンプルプログラム(一部)

case WM_SIZE:
{
  printf("    WM_SIZE\n"
    "x-size : %d\n"
    "y-size : %d\n",
    lParam & 0xFFFF,
    (lParam >> 16) & 0xFFFF
  );
  RECT rect;
  GetClientRect(hWnd, &rect);
  printf("    GetClientRect\n"
    "x-size : %d\n"
    "y-size : %d\n",
    rect.right,
    rect.bottom
  );
}
  puts("-----------");
  break;
case WM_SIZING:
{
  RECT* prect = (RECT*)lParam;
  printf(
    "    WM_SIZING\n"
    "left  : %d\n"
    "top   : %d\n"
    "right : %d\n"
    "bottom: %d\n"
    ,
    prect->left,
    prect->top,
    prect->right,
    prect->bottom
  );

  RECT rect;
  GetWindowRect(hWnd, &rect);
  printf(
    "    GetWindowRect\n"
    "left  : %d\n"
    "top   : %d\n"
    "right : %d\n"
    "bottom: %d\n"
    ,
    rect.left,
    rect.top,
    rect.right,
    rect.bottom
  );

  puts("");
}
  break;

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: