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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1124
たくろうウィンドウの指定職の透過7解決


たくろう

リンク

2017/11/24(Fri) 23:55:08|NO.81901

度々すいません
よくゲームを作るときにキャラ以外の黒は透過してメインウィンドウに透過して描くというのがありますが
そういうのではなくて、ウィンドウがあったとして指定の色だけすっぽり抜けて
デスクトップが見えるような状態にしたいのです
これだとリージョンの域なのでしょうか?
hspだけじゃなくてdllとか使ってよくわからないので
わかりやすく教えてもらえると嬉しいです汗



この記事に返信する


いののて

リンク

2017/11/25(Sat) 09:47:32|NO.81902

user32 のSetLayeredWindowAttributes関数を使えば可能です。
透過色として指定した色で描画すれば、描画したところだけ透けます。
#include "user32.as"
#define GWL_EXSTYLE (-20) #define WS_EX_LAYERED 0x00080000 #define LWA_COLORKEY 0x00000001 #define ctype RGB(%1, %2, %3) ((%1 << 16) | (%2 << 8) | %3) screen 0 SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED //ウィンドウにレイヤードスタイルを適用 SetLayeredWindowAttributes hwnd, RGB(0, 255, 0), 0, LWA_COLORKEY //第2パラに透過色を指定する。 //穴を開けてみる color 0, 255, 0 circle 0, 0, 640, 480, 1



Seal

リンク

2017/11/25(Sat) 10:41:19|NO.81903

関係ないですが

#include "user32.as" #define GWL_EXSTYLE (-20) #define WS_EX_LAYERED 0x00080000 #define LWA_COLORKEY 0x00000001 #define ctype RGB(%1, %2, %3) ((%1 << 16) | (%2 << 8) | %3) screen 0 SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED //ウィンドウにレイヤードスタイルを適用 SetLayeredWindowAttributes hwnd, RGB(200, 0, 0), 0, LWA_COLORKEY //第2パラに透過色を指定する。 //穴を開けてみる color 200, 0, 0 circle 0, 0, 640, 480, 1
透過色にも制限があるのでしょうか?
どうやら透過の判定はありますがウィンドウに色がついてますね



いののて

リンク

2017/11/25(Sat) 14:15:27|NO.81904

すみません、RGBマクロが間違っていました。

誤 #define ctype RGB(%1, %2, %3) ((%1 << 16) | (%2 << 8) | %3)
正 #define ctype RGB(%1, %2, %3) ((%3 << 16) | (%2 << 8) | %1)



Seal

リンク

2017/11/25(Sat) 16:05:18|NO.81905

あ、そうだったんですね^^



たくろう

リンク

2017/11/25(Sat) 23:21:43|NO.81908

皆様ありがとうございます
色々集中できない環境で毎回聞いてばかりになってしまってしまいますが
いつかはちゃんと使いこなしたいです
こういう命令って結局cというか色んな言語で使える命令なんですか?
同じ書き方で使えるようになってるんでしょうか

透過の目的ですが数個のウィンドウで移動したら固まるので
いっそ透過した巨大なウィンドウを透過してクリックしたらposで疑似的にウィンドウ作ろうという目論見で
当たり前ですがうまくはいきまして、けどウィンドウ移動したらその分塗りつぶしますよね
キーなら1移動したら−1の部分を塗りつぶしますけど
マウスで移動する場合必ず1ではないし1回のメインループでかならず1移動するわけではないんですよね?
簡単な解決法なら(まだ試してませんが)どこに移動するか定めないけど
移動するフラグになったらウィンドウの周りを透過色で塗りつぶす方法は考えました
軽くするなら移動した部分だけやるのが理想ですが考え方がわかりません
ご意見あったらよろしくお願いします



いののて

リンク

2017/11/26(Sun) 11:37:46|NO.81911

>こういう命令って結局cというか色んな言語で使える命令なんですか?
WinAPIを呼び出せる言語であれば使えます。
c言語でもできますよ。
SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hTW_MainWindow, GWL_EXSTYLE) | WS_EX_LAYERED); //ウィンドウにレイヤードスタイルを適用
SetLayeredWindowAttributes(hWnd, RGB(0, 255, 0), 0, LWA_COLORKEY); //第2パラに透過色を指定する。

ついでに、なでしこでも:
!GWL_EXSTYLE = -20
!WS_EX_LAYERED = $00080000 !LWA_COLORKEY = $00000001 SetWindowLong(母艦ハンドル, GWL_EXSTYLE, GetWindowLong(母艦ハンドル, GWL_EXSTYLE) || WS_EX_LAYERED)。 SetLayeredWindowAttributes(母艦ハンドル, WRGB(0, 255, 0), 0, LWA_COLORKEY)。

>同じ書き方で使えるようになってるんでしょうか
書き方はその言語の仕様にあわせて書きます。

>透過の目的ですが数個のウィンドウで移動したら固まるので
よくわかりませんが、ウィンドウを移動すると固まることはないので、
メインループにwaitを入れていないなどの問題があると思います。

>マウスで移動する場合必ず1ではないし1回のメインループでかならず1移動するわけではないんですよね?
前回のマウスカーソルの位置と差分をとればどのくらい移動したかがわかります。
http://hsp.tv/play/pforum.php?mode=all&num=81837



たくろう

リンク

2017/11/27(Mon) 01:32:08|NO.81913

ありがとうございます
概念とか知識不足ですが色々な所で使えるわけですね
早く使えるようになりたいですが勉強嫌いの頭では授業を聞いてるようで頭に中々はいりません苦笑
ブロックのように自分で組み立てることには頭は回るのですが・・・
話はそれはましたが要は描く前に位置をとり描いた後に描く前のいちを塗りつぶせばいいんですよね
そう言ってはいるんだろうけどわかっている人と分かっていない人では同じ言葉でも意味が違うと思うので書いておきます
皆様毎度ながらありがとうございました!



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