HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0326
roppyakukee引数に | (or)を使う形について解説がほしいです4解決


roppyakukee

リンク

2014/3/26(Wed) 11:51:11|NO.60967

こちらのサイトから引用させてもらいましたが、
http://blog.goo.ne.jp/hiro239415/e/6860f82ef2939e3e14268e96e0479edc


//スタイルの追加
//GWL_EXSTYLE(-20)を取得
GetWindowLongA hwnd , -20
//WS_EX_LAYERED(0x00080000)を追加
SetWindowLongA hwnd , -20 , stat | 0x00080000


サンプルのstatはスタイル指定の失敗時の為の、現在のスタイルを返す
ものなんだろうとは思いますが・・・
statと0x00080000を入れ替えても、0x00080000が優先されているみたいで
ウィンドウが透過されます。
引数にorを使う場合、どういった風になるんですか?

知識も浅く、誤解している部分があると思うのでその時は、指摘お願いします。



この記事に返信する


kanahiron

リンク

2014/3/26(Wed) 12:54:21|NO.60968

まず数値の16進表記、0x00080000などは理解されているでしょうか?
//スタイルの追加
//GWL_EXSTYLE(-20)を取得 GetWindowLongA hwnd , -20 //WS_EX_LAYERED(0x00080000)を追加 SetWindowLongA hwnd , -20 , stat | 0x00080000

は書いてある通りのことをしています

GetWindowLongA hwnd , -20
で現在のスタイルをstatに格納し、
SetWindowLongA hwnd , -20 , stat | 0x00080000
でstatにWS_EX_LAYEREDを足しています

おそらく、orという名前からどちらかの数値が使われると思っているのでしょう
orは論理演算の一つで、ようは+や×などの仲間です

statが0x101の場合(数値は適当です)、stat | 0x00080000は
0x00080101になります

論理演算について詳しくはここで http://www.asahi-net.or.jp/~ax2s-kmtn/ref/logicope.html



MillkeyStars

リンク

2014/3/26(Wed) 13:15:44|NO.60969

ウィキペディアのビット演算って項目を見た方がいいかもね。
URL : http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97

WinAPI の多くが、ビットフラグが立っているかいないかで動作を決めている。
HSP の stick も同じ原理だよ。

単純に、on/off の解釈でしかないから、理解は簡単。

以下、透過のサンプル

#uselib "User32.dll" #func SetWindowLong "SetWindowLongA" int,int,int #cfunc GetWindowLong "GetWindowLongA" int,int #func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,int,int,int #const LWA_COLORKEY 1 ;透明色を指定 #const LWA_ALPHA 2 ;アルファー値を指定 #const GWL_EXSTYLE -20 ;拡張ウィンドウスタイル #const WS_EX_LAYERED $00080000 ;透明なウィンドウ属性 #const WS_EX_TOOLWINDOW $80 bgscr 1,ginfo_dispx,ginfo_dispy,2 : cls 4 : video_hwnd=hwnd SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE)|WS_EX_TOOLWINDOW|WS_EX_LAYERED SetLayeredWindowAttributes hwnd,0,128,LWA_ALPHA | LWA_COLORKEY color 255,0,255 font "MSゴシック",48,1 pos 300,300 : mes "この文字が見えますか?" gsel 1,2 ;// スタイルを変更してから表示する。

WinAPI の説明などは、MSDN を参照してください。



roppyakukee

リンク

2014/3/26(Wed) 14:50:24|NO.60970

・・・なんだかよくわからないけど、
形というか、流れは分かりました。

よくパソコンの本にビット、2進数、演算ってあるけど
理解しておく必要が大いにありそう。いや、ある。
ビット演算か・・・orは確かどちらかが1だったら1を返す・・・
あれ、これ16進数じゃなくて2進数・・・

ちょっと図書館で本借りてきます。



KA

リンク

2014/3/26(Wed) 16:12:55|NO.60976

>>orはどちらかが1だったら1を返す

その通りです、両方1でも「どちらかは1」なので1を返します。
片方が1のみ(排他的)は xor です。



ONION software Copyright 1997-2023(c) All rights reserved.