LOWORD,HIWORDについて

解決


スパゲッチュー  2006-10-30 21:42:43  No: 97069

環境  VB6.0  WindowsXP PRO
はじめまして。
自ウィンドウをサブクラス化して
ウィンドウメッセージがWM_SIZEの時のlParamメッセージは
Long値ですが、VC等で上位下位に切り分けるLOWORD,HIWORD
みたいな処理はあるのでしょうか。
御教授お願いします。


Blue  2006-10-30 22:23:37  No: 97070

おそらくないです。自作してください。


スパゲッチュー  2006-10-31 00:09:12  No: 97071

Blueさん、ご返答ありがとうございます。
自作になるのですか。
コールバック関数内で処理をしたいので重い処理は省きたかった
のですが・・・

自身ないので突っ込み歓迎で載せておきます。

Dim HIWORD As Long , LOWORD As Long , Vstr As String
Vstr = Hex(lParam)
If Len(Vstr) < 8 Then Vstr = String(8 - Len(Vstr), "0") & Vstr
HIWORD = CLng("&H" & Mid(Vstr, 1, 4))
LOWORD = CLng("&H" & Mid(Vstr, 5, 4))

まだ、どんな状況でも対応できてるか心配ですが、ご指摘等ありましたら
お願いします。


Blue  2006-10-31 00:52:17  No: 97072

文字列にする必要はないのでは?
単純にビット演算すればよさそうです。

参考
http://hp.vector.co.jp/authors/VA014162/hitch/bit/bit.htm
バイト・ワード・ダブルワードの話

3.Long型をInteger型に切り分ける 
のところ。


VB梅  2006-10-31 01:54:17  No: 97073

まとめるとこんな感じでしょうか

Dim b As Long, c As Long
Dim aw As Long, bw As Long, cw As Long

c = &HF1F1 '上位
b = &HD1D1 '下位

'下位と上位を合わせる
aw = c * 65536
aw = aw Or (b And 65535)

'下位と上位を分離
bw = aw And 65535
cw = ((aw And &HFFFF0000) \ 65536) And 65535

MsgBox Hex(cw) & "-" & Hex(bw)


スパゲッチュー  2006-10-31 02:52:26  No: 97074

Blueさん、VB梅さんありがとうございます。
大変勉強になりました。
御協力ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加