- ベストアンサー
(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));
- みんなの回答 (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 型へのキャストはこのような理由で必要となるのです。 ・以上。おわり。
その他の回答 (3)
- php504
- ベストアンサー率42% (926/2160)
HIWORDマクロの値はWORDでこれは16ビット符号なし整数です。 SHORTは16ビット符号つき整数です。 符号なしから符号ありへの変換を行っているようです。
お礼
回答ありがとうございます! 符号なしから符号ありへの変換を行っているようです。 と言うのは、参考になりました! ありがとうございます!
- tea_sheep
- ベストアンサー率53% (8/15)
HIWORDマクロが返す値は符号なし整数(WORD型)なので これを符号つき整数であると解釈させるためにSHORTへの キャストを行っています。
お礼
回答ありがとうございます! 解説どうもでした!
- stiffels
- ベストアンサー率34% (25/72)
WORDからSHORTへキャストするのを明示的にやっているのだと思いますよ。
お礼
回答ありがとうございます! 参考になりました!
お礼
回答ありがとうございます! 完璧な回答どうもです! すごい参考になりました!ありがとうございます!