なんかこっちのほうが需要あるみたいなんで記事順番入れ替えしましたこの記事の方法では、画面更新時にチラツキが発生します。
チラツキなく描画することに成功したので、
AeroGlassに描画する方法をお探しの方はこちらの記事を参照してください
http://waiei.blog7.fc2.com/blog-entry-627.html
いい加減TALKのコーナーのHSP編もネタ溜まってるんだから
更新しないといけないんですけどねー。
まあ、それはおいておいて。
WindowsVistaから半透明なウインドウを作成できるようになりました。
ただの半透明ではなく、タイトルバーのように
後ろがぼけて見える半透明です。
というか、タイトルバーがそのままクライアント領域まで伸びたような。
Vista以降に存在する、dwmapi.dllを使えば簡単に実現できます。
ちなみに一番短いソースはこんな感じ↓
#uselib "dwmapi"
#func DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int
screen 0,240,240,0:title "グラスウインドウ"
a=-1,0,0,0
DwmExtendFrameIntoClientArea hwnd,varptr(a)
cls 4
stop
こいつを実行するとこんな感じ↓

うん、良い感じに透明です。
しかし!実は、透明にすると標準命令で図形や文字を描画しても
加算合成されてしまい、後ろが白い場合はほとんど見えなくなってしまいます↓

まあ、とりあえず今はそんなのかんけーねーと思ってほかに出来ることでも。
じつは、ウインドウの中身も透明化できます。
というかもう説明がめんどくさいので実行画面見てくださいな↓

あんまり需要ないような気がしないでもないですけどねw
ちなみに完全に透明になっている部分は従来のリージョンウインドウと違い、
クリックしても下のウインドウは選択されません。本当に枠だけにすることも可能w
あれだ、
Windows7で取り入れられるといわれているウインドウを枠だけにしてデスクトップを見えるようにすることも
出来るんじゃないですかねー。
ソースはこんな感じ↓
#uselib "dwmapi"
#cfunc DwmIsCompositionEnabled "DwmIsCompositionEnabled" int
#func DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int
#func DwmEnableBlurBehindWindow "DwmEnableBlurBehindWindow" int,int
#uselib "gdi32"
#cfunc CreateRectRgn "CreateRectRgn" int,int,int,int
#cfunc CreateEllipticRgn "CreateEllipticRgn" int,int,int,int
#func DeleteObject "DeleteObject" int
#uselib "user32"
#cfunc GetWindowLong "GetWindowLongA" int, int
#func SetWindowLong "SetWindowLongA" int, int, int
screen 0,240,240,2:title "グラスウインドウ"
SetWindowLong hwnd, -16, GetWindowLong (hwnd, -16) | $10000 | $40000
gsel 0,1
if DwmIsCompositionEnabled()=0:dialog "未対応!":end
a=0,0,50,50
DwmExtendFrameIntoClientArea hwnd,varptr(a)
rHwnd=CreateEllipticRgn(50,50,ginfo_winx-51,ginfo_winy-51)
b=0x07,1, rHwnd,1
DwmEnableBlurBehindWindow hwnd,varptr(b)
DeleteObject rHwnd
cls 4
color 128,128,128:boxf 0,80,ginfo_winx,ginfo_winy-81
color 0,0,0:font "meiryo",15,0
pos 0,110:mes "WindowsVistaで半透明ウインドウ"
stop
で、先ほどいったように文字が加算合成される現象。
これは何とかならないのかと思い
MSDNマガジン(図10あたり)を見てみると
・GDI+を利用する方法
・オーナー描画コントロールを使用する方法
・アルファ チャネルを持つビットマップにレンダリングする方法
これだけ回避方法があるみたいです。
と言ってもサッパリなんで適当に探すこと早半年(笑)
sprocket氏のサイトにて配布されているHSPでGDI+を使えるようにする
Artlet2Dで挑戦してみることに。
しかし、今回の回避方法としては、
透明化したウインドウに直接GDI+を利用して描画する必要があり、
このArtlet2Dは独自のバッファから透明化したウインドウにコピーする為
まったく効果がありません。
しかし!(またか)
このサイトのフリーBBS、2007/06/18の記事に
α版的ポジションのサンプルが当時ありました。
これは直接描画(と言うかバッファとウインドウをリンクさせる)ことが可能で、
ウインドウを透明化してもちゃんと文字が読めました。
さらに、2007/12/04の記事のβ版にも、
存在はするが使えなくされていたので、
α版と見比べながら書き換え成功。
んでもって使ってみたらこんな感じ↓

キタ━━━━━━(゚∀゚)━━━━━━━!!!!!
結構良い感じに描画されました!
ちなみに某所に上げられていたやつを読み込んでみた↓

無駄にかっけぇw
著作権フリーとのことなので書き換え版のDLはこちら※2013/09/10 リンク切れだったので修正
!注意!
書き換えないと使えないようにしているくらいなので
もしかするとPCが危険な状態になるかもしれないです。
(今のところこっちのPCでは何も問題起こってないが。)
あくまで、使用するなら自己責任で。
書き換え版についての質問はオリジナル作者のsprocketさんに
しないでください、絶対に。
だからと言ってこっちに訊かれてもわからん^^;ちなみに書き換え版を利用したソースはこちら↓
#include "ali.hsp"
#uselib "user32"
#cfunc GetWindowLong "GetWindowLongA" int, int
#func SetWindowLong "SetWindowLongA" int, int, int
screen 0,ginfo_dispx,ginfo_dispy,2
SetWindowLong hwnd, -16, GetWindowLong (hwnd, -16) | $10000 | $40000
width 640,480:gsel 0,1
dialog "bmp;*.jpg;*.jpeg;*.png;*.gif",16
if stat=0:end
alCreateImageByFile 1,refstr
w=alGetWidth():h=alGetHeight()
alCreateImage 0,ginfo_dispx,ginfo_dispy
vistaexframe -1,0,0,0:cls 4
alLinkImageToScreen 0,0
alColor 0,0,0,255
alFont "meiryo", 50, 16
alDrawText "Test",0,0
pos 0,100
alCopyImageToImage 1,0,ginfo_cx,ginfo_cy,640,480,0,0
alRedraw
onclick gosub *update
repeat
gosub *timeupdate
wait 1
loop
stop
*update
alEraseRect 0,100,ginfo_dispx,ginfo_dispy
alStretchImageToImage 1,0,0,0,w,h,(ginfo_winx-w*(ginfo_winy-120)/h)/2,100,w*(ginfo_winy-120)/h,(ginfo_winy-120)
redraw
vistaexframe -1,0,0,0:cls 4
alRedraw
return
*timeupdate
if old_sec!gettime(6):old_sec=gettime(6):redraw 1,0,0,300,100:else:return
alEraseRect 0,0,300,100
alDrawText ""+strf("%02d",gettime(4))+":"+strf("%02d",gettime(5))+":"+strf("%02d",gettime(6)),0,0
alRedraw 0,0,300,100
return
いつもの日記はここから↓
Web拍手レス
6周年おめでとうございます!
HELPシリーズってもう無いんですか?
HELPシリーズはすごく気に入っていますので
6周年記念にぜひ1曲!w
(ずうずうしいこといってごめんなさいw) ありがとうございますー。
うーん、当時数少ないbpm300越え曲の配布サイトだったんですけど
今やパッケージなどで当たり前のようにそういう曲がありますからねー。
あんまり需要がないというのも作らなくなった理由のひとつではあります。
音源の問題は一応今利用している音源のVSCで
近い音を出すことが出来るので何とかなると思いますが。
企画凍結中の
ABSOLUTEにて主催者のMr-ty氏によるアレンジが
収録予定だったんですけど凍結してしまってますしねー…。
一応復活しようぜー的な話は出てるんですけどまだしばらくは難しいかな。
オリジナルゲームのBGMなどに利用される可能性とかはありますけど
BMSでの復活はあまり期待しないでくださいな^^;
とりあえず今は蜘蛛神様で許してください><
トランシーバーONIバトル第43話最初から見たい人はこちら-これあら-
どうしてここに!?
<画像リンク切れの為消去(メインサイトから閲覧できます)>
むしろ後半が本音
おひさしぶりですー、本当に2週間に1回の割合で
更新しているダメダメなA.Cですこんにちは。
一応ちょくちょく更新はしているんですけどねー…。リンクページとか。
そろそろ就職活動に力を入れないといけないんですよねー…
l/l// ,. --- .. __ /
な 絶 / / `ヽ、_人/ ご 働
い 対 // / \ ざ き
で に /_ .′ ヽ、\ \ る た
ご 働 / ,,″ / ,ィ | l ll |l l ぃ ヽ <_ /// く
ざ き ∠ 〃 -/、/ ! | l ll ll | l i '. / ’’’ な
る た /// ,.イfr㍉i、| | ll |l |,-H‐ i ′ い
/// く / l i //|/`┴1| |/|ィ乏了ト、 /// で
. ’’’ .′ l|/,小、 _⊥ _ リ,ハ l .' /| ∧
/`Vヽ. /\ | | | |八 /ー--‐1`メ、厶ィi |/,.イ| l / ∨\
∠__ ∨ ヽ.} | | }川ヽ. ト、 ,ィ}/ //リ l/i/リ | ′
ゝ `V , ‐ァ .' メ、トく\/ヽヽ辷ク ,ィ'/‐-/リ,∠..._ l//
\ // / // 丶 \\ \_/// / / / `メ、
ー- ヽ/ / // /〉 \ ヽ.ヽ /{丁iヽ / / \ /〉
// ー- / // /// ̄ ヾ 、 ヽ} `l | ィ\ / / /∧ / //
./ / / /ー//,′ }`ヾ i| L___// | ,.へ,.イ/} // ,レ' //
/ / / //7 / !`ヽ、 // ,.ィ' / ト、く /| 〈/
. /‐- / / /// / / ├く// l l 丶>' ノ 〇
. / ー-/// / ′ / | / ヽ/ ̄/
//´ / / ' /ー-' .. _  ̄l
. 〈/ ' / / `ヽ
セミナーとか行ってると本当にこんな状態w
しかし最近夜はニート状態になっているんで
いい加減ソフト作りとか作曲とかしないといけないですねー。
[日記][トランシーバーONIバトル][HSP]