誰が為に猫は鳴く
■TOP■
■Addin■
■ガレキ■
■ひた猫■
■会議室■
■Link■

こんなん出来ましたけど(笑)



本当は3月3日の合同OFFに間に合わせたかった…

とか言いつつ当日会場でも作ってたやん(爆)

で、今回は透明ウィンドウを使ってみましたので
その話を。

って”任意”たんが頭にあったのでは?
その可能性は否定できないな(笑)

ともかくデスクトップマスコット風にしたかったので
どうしても立ち上げ前の背景を残したかったわけです。
ただ普通にフォームを使うと、フォームクラスの最初に
ClearWindow()関数にて真っ白にしてくれます。

それに関しては、ざうりすの際に経験済でしたので
フォームエディタにてイベントタグにFormRedispを
セットして、FormRedisp()関数内に

FormDefRedisp(AplForm,0);
(APIマニュアル138ページ)

にて回避可能です。
(APIマニュアル166ページ)

さて、後は透明ウィンドウを開くだけなのですが
APIマニュアルを見ると、メインウインドウを
透明で立ち上げるにはリソースをいじらないといけない
とあります。
(APIマニュアル164ページ)

それは何か面倒くさそうなので、他の方法は無いかと
あさってみましたら… SZABが生成するソースの
中にありました!

PIMクラスメソッドが書かれる
「アプリケーション識別名main.c」内の
PIMExecSetup()関数に、VGAとQVGAで
ウィンドウを切替えている部分がありました!

#ifdef VGA_140DPI_APL

WIN_WORK_EXT WinWorkExt;
/* PIMクラスのウィンドウオープンをやめる */
PIMExecWork->WhichWindow = PIM_WIN_NO_OPEN;
/* VGAウィンドウを開き、PIMクラスがそのウィンドウを使用するように */
/* 設定する */
WinWorkExt.userID = APL_WIN;
WinWorkExt.CrLocPoint.x = 0;
WinWorkExt.CrLocPoint.y = 0;
WinWorkExt.CrSize.x = 640 * 4 - 1;
WinWorkExt.CrSize.y = 480 * 4 - 1;
WinWorkExt.WinType = WN_NO_FRAME;
WinWorkExt.PileMode = BOTTOM;
WinWorkExt.DestWinNo = 0;
WinWorkExt.OpenPosition = 0;
WinWorkExt.AutoAdjMode = NONE;
GetSystemColor(&(WinWorkExt.Color), SYS_BACK_COLOR);
PIMExecWork->WnHandle = OpenNormWindowVGA(&WinWorkExt);
#endif /* VGA_140DPI_APL */

でその部分を拝借して…

WIN_WORK WinWorkExt;

/* PIMクラスのウィンドウオープンをやめる */
PIMExecWork->WhichWindow = PIM_WIN_NO_OPEN;
/* 透明ウィンドウを開き、PIMクラスがそのウィンドウを使用するように */
/* 設定する */
WinWorkExt.userID = APL_WIN;
WinWorkExt.CrLocPoint.x = 0;
WinWorkExt.CrLocPoint.y = 0;
WinWorkExt.CrSize.x = 320 * 4 - 1;
WinWorkExt.CrSize.y = 240 * 4 - 1;
WinWorkExt.WinType = WN_TRANSPARENT;
WinWorkExt.PileMode = TOP;
WinWorkExt.DestWinNo = 0;
WinWorkExt.OpenPosition = 0;
WinWorkExt.AutoAdjMode = NONE;
GetSystemColor(&(WinWorkExt.Color), SYS_BACK_COLOR);
PIMExecWork->WnHandle = OpenNormWindow(&WinWorkExt);

をPIMExecSetup()関数の最初にいれてみたら…
うまくいきました!
(パラメータに関してはAPIマニュアル164ページ)

あとはフォームクラスにていつもの通りに
アイコンを表示させると…最初のような画面が出ました!

なんかメチャいいかげんやな(^^;
いいんだよ!出来ちゃえばこっちのもんだから(笑)

それから、透明ウィンドウのウインドウハンドルを使って
PutPixMapToOffscreen()関数にて画面を取得しても
ちゃんと下の画面が取得できました。

ただし、今回のソースではVGAには対応して
おりませんのでご注意ください。
(正確に表示されないだけですが)

手抜きやな。
うっさい!!

■TOP■
■Addin■
■ガレキ■
■ひた猫■
■会議室■
■Link■

このページはご自由にリンクしてください。
というかどのページもリンクOKです。


山之内案山子@LIPS 2001/03/05更新