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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0706
モルダーウィンドウの透明化とマウススルーの謎2解決


モルダー

リンク

2015/7/6(Mon) 19:29:24|NO.69979

[HSP 3.4]で次のようなテストプログラムを作りました。
ボタンを押すとそれぞれ、赤、緑、青の部分が透明になります。
ウィンドウ全体は左クリックしながら移動できます。
通常透明になった部分はマウス操作を無視され下に重なってるアプリなどに
移ると思います。
緑は問題なく透明になりますが、赤と青は、透明にはなるものの、クリックして
ドラッグできる状態で、逆側の青(または赤)がなぜかマウス操作がスルーされます。
これはなぜでしょうか? プログラムにミスがあるのでしょうか?


// ウィンドウの透明化テスト
// !要 Windows 2000以降

#include "user32.as"
#module
;ウィンドウをマウスでドラッグムーブ
#deffunc dragwindow int p1,int p2,int p3,int p4
if (p1<mousex)&(p2<mousey)&(p3>mousex)&(p4>mousey){
repeat:if mb=0{mb=1:aa=ginfo(0)-ginfo(4):bb=ginfo(1)-ginfo(5)}
width ,,ginfo(0)-aa,ginfo(1)-bb:getkey key,1:wait 1:if key=0{break}loop:mb=0}return
#global

#define WS_EX_LAYERED $80000
#define LWA_COLORKEY 1

onclick gosub *move
bgscr 0,320,200 : gsel 0,2
syscolor : boxf: width ,,80,80

; 拡張ウィンドウスタイルにWS_EX_LAYEREDを追加適用
GetWindowLong hwnd, -20
SetWindowLong hwnd, -20, stat | WS_EX_LAYERED
color 1,1,1: mes "てすとうぃんどう"
color 255,0,0:boxf 20,20,100,100: c1= 0x0000ff ;赤
color 0,255,0:boxf 120,20,200,100: c2= 0x00ff00 ;緑
color 0,0,255:boxf 220,20,300,100: c3= 0xff0000 ;青

pos 128,120
button gosub "すけred",*sukesuke1
button gosub "すけgreen",*sukesuke2
button gosub "すけblue",*sukesuke3
stop

*sukesuke1 ;赤を透明に
SetLayeredWindowAttributes hwnd, c1, 0, LWA_COLORKEY
return
*sukesuke2 ;緑を透明に
SetLayeredWindowAttributes hwnd, c2, 0, LWA_COLORKEY
return
*sukesuke3 ;青を透明に
SetLayeredWindowAttributes hwnd, c3, 0, LWA_COLORKEY
return

*move
if iparam = 3 : end
dragwindow 0, 0, 320, 200
return



この記事に返信する


totori

リンク

2015/7/6(Mon) 20:21:33|NO.69980

https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/194a091b-3c69-4505-91ac-8fd68a791fa4/setlayeredwindowattributes?forum=vcgeneralja

これかな?
2006年から発生していた現象らしいので、仕様か… 不具合が放置されているか。



モルダー

リンク

2015/7/6(Mon) 22:25:08|NO.69981

システム側の不具合のようなものですか。こちらはwindows8.1ですが同じ現象のようですね。
透明化しているのに色によってクリックできたり、できなかったりで不思議に思っていました。
どうやら、赤と青の数値が同じなら大丈夫で、違うと発生するようです。
ありがとうございました。



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