• ベストアンサー

(SHORT)

ウインドウプロシージャ内ですが、(SHORT)は何のためについているんでしょうか?(どんな効果がありますか) 教えてください。 case WM_MOUSEWHEEL :     wsprintf(str,TEXT("WHEEL %s"),        ((SHORT)HIWORD(wparam))>0 ? TEXT("↑"):TEXT("↓"));     hdc=GetDC(hwnd);     TextOut(hdc,0,0,str,lstrlen(str));

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★既に『符号なし』を『符号あり』へのキャストという回答がありますね。 ・でも、多分質問者さんもキャストのことは知っていると勝手に解釈して  なぜ、(SHORT)キャストする必要があるのかってことですよね。→効果。 ・そこで、追加アドバイスします。 理由:効果とは? ・『WM_MOUSEWHEEL』というメッセージの『wParam』の上位 16 ビットは  マウス・ホイールの回転の方向を返しますよね。  このとき、負の値も返すんですよ。 ・だから、『HIWORD』マクロ関数だけではすべてが符号なしの整数ですから  回転の方向を感知できません。SHORT 型にキャストすることで 32767 以上  の数値を『負の値』として解釈できるため、その後の上下の矢印を正しく  表示できます。→これが SHORT 型にキャストする理由と効果です。 ・このキャストを行わないと、常に『↑』矢印だけの表示になってしまい  マウス・ホイールの回転の方向を検出できません。 余談: ・『WM_LBUTTONDOWN』というメッセージの『lParam』も同様に、  INT cx = (SHORT)LOWORD(lParam);  INT cy = (SHORT)HIWORD(lParam);  としてマウス・カーソルの位置を取得させます。 ・このメッセージも『lParam』は負の数を返すためです。 ・SHORT 型へのキャストはこのような理由で必要となるのです。 ・以上。おわり。

startover
質問者

お礼

回答ありがとうございます! 完璧な回答どうもです! すごい参考になりました!ありがとうございます!

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

HIWORDマクロの値はWORDでこれは16ビット符号なし整数です。 SHORTは16ビット符号つき整数です。 符号なしから符号ありへの変換を行っているようです。

startover
質問者

お礼

回答ありがとうございます! 符号なしから符号ありへの変換を行っているようです。 と言うのは、参考になりました! ありがとうございます!

  • tea_sheep
  • ベストアンサー率53% (8/15)
回答No.2

HIWORDマクロが返す値は符号なし整数(WORD型)なので これを符号つき整数であると解釈させるためにSHORTへの キャストを行っています。

startover
質問者

お礼

回答ありがとうございます! 解説どうもでした!

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.1

WORDからSHORTへキャストするのを明示的にやっているのだと思いますよ。

startover
質問者

お礼

回答ありがとうございます! 参考になりました!