影つきウィンドウ CS_DROPSHADOWについて
Humi 2013/8/11(Sun) 15:38:54|NO.56279
bgscrで枠なしウィンドウを作成して
SetLayeredWindowAttributes で任意の色を透過して
●だけを表示できるようにしたんですが
ウィンドウクラスのスタイルに CS_DROPSHADOW をつけても
影が円形に、ウィンドウにそってついてくれません。
あと普通のウィンドウよりも影が小さく、
非アクティブになっても影の大きさが変わりません
なんかそれようのソースを探してるんですが、なかなかみつかりません。
ソースはC/C++でもいいですDLLにするので、
だれかお願いします。
※XP以上じゃないと正常にならないと思います。
#uselib "user32.dll"
#func SetLayered "SetLayeredWindowAttributes" int, int, int, int
#func SetClassLong "SetClassLongA" int, int, int
#func SetWindowLong "SetWindowLongA" int, int, int
#cfunc GetClassLong "GetClassLongA" int, int
#cfunc GetWindowLong "GetWindowLongA" int, int
#define global GCL_STYLE -26
#define global GWL_EXSTYLE -20
#define global WS_EX_LAYERED 0x00080000
#define global LWA_COLORKEY 0x0001
#define global CS_DROPSHADOW 0x00020000
bgscr 0, 640, 480, 2
hMWnd = hwnd@hsp
SetWindowLong hMWnd, GWL_EXSTYLE, GetWindowLong(hMWnd, GWL_EXSTYLE) | WS_EX_LAYERED
SetLayered hMWnd, RGB(1, 2, 3), 255, LWA_COLORKEY
SetClassLong hMWnd, GCL_STYLE, GetClassLong(hMWnd, GCL_STYLE) | CS_DROPSHADOW
color 1, 2, 3 :boxf :color 0, 0, 255
circle@hsp 0, 0, ginfo(12), ginfo(13), 1
gsel 0, 1
oncmd gosub *WindowProc, WM_LBUTTONDOWN
stop
*WindowProc
switch iparam
case WM_LBUTTONDOWN
sendmsg hMWnd, WM_NCLBUTTONDOWN, 2
swbreak
swend
return
あ 2013/8/12(Mon) 08:20:45|NO.56289
UpdateLayeredWindow で出来るんじゃないかなぁ・・・
ttp://d.hatena.ne.jp/As_hsp/20091215/1260842075
Humi 2013/8/12(Mon) 11:54:22|NO.56292
やっぱりそれしかないですかね〜(^^;)
HSPの描画関係の命令が全滅するんですよねーそれ
まぁどっかのサイトであったそのウィンドウの上にさらに透過ウィンドウでもはっつけて
なんとかしてみますわ。
情報提供ありがとです。
(’’ 2013/8/12(Mon) 13:26:43|NO.56294
ウィンドウリージョンを設定したら影が消えるのはWindowsの技術的な仕様なのでどうにかするには自作するしか・・・
http://www.enoie.net/blog/2012/03/%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6-%E3%81%BE%E3%81%A8%E3%82%81/
頑張ってください