忍者ブログ

神戸電子専門学校ゲームソフト学科の生徒が運営するGESのブログです。

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

WindowsAPI講座【ウィンドウで遊ぼう編】 Part3

どうも克兎でっす~。

久しぶりにこのシリーズを書きます。
1年生がdglibをどの程度使えるのか知らなかったので、
しばらく休載していました。

その上、dglibがdglib2になっているという変わりよう…

どちらで、やればいいのかとか、悩んでましたが、
色々考えた結果、dgib2でやることにします。

前回書いた内容は、dglibのままですが、コンパイルは通るはずなのでそのままにします。

拍手[0回]


今回は、レイヤードウィンドウについて説明します。

レイヤードウィンドウとは
下位Zオーダーにあるウィンドウと
色情報を混ぜてやることのできるウィンドウです。

簡単に言うと、透明化ができるウィンドウってことです。

Zオーダーというのは、ウィンドウの並んでいる順序のことです。


レイヤードウィンドウにするには、
ウィンドウスタイルEXにレイヤードウィンドウ属性を設定する必要があります。

方法はこちらです。
main関数内に書いてください。

main.cpp

 #define WINNAME "Katuusagi_Program"

    :
    :

 HWND hWnd;  //ウィンドウハンドル
 int Alpha;  //アルファ値
 COLORREF Color; //透明色

 //ウィンドウの大きさとか初期設定
 dg_setscreen( 100 , 100 , 400 , 200 , 0 , WINNAME );
 //ウィンドウ名からウィンドウハンドルを取得
 hWnd = FindWindow( NULL ,     WINNAME );

 //レイヤードウィンドウ属性の付加
 SetWindowLong( hWnd , GWL_EXSTYLE , WS_EX_LAYERED );

 



FindWindowについてはPart1で記述しました。
ここで手に入れたウィンドウハンドルで、
SetWindowLong関数を実行します。

LONG SetWindowLong(
  HWND hWnd,       // ウィンドウのハンドル
  int nIndex,      // 設定する値のオフセット
  LONG dwNewLong   // 新しい値
);


この関数は
第1引数にウィンドウのハンドルを指定し、
第2引数に、変更したい「ウィンドウの情報を指定するフラグ」を設定できます。

今回、設定するのはGWL_EXSTYLEです。
これは、ウィンドウスタイルEXを書き換えるフラグです。

第3引数には第2引数で指定した情報を上書きする値を設定します。
つまり、今回は、ウィンドウスタイルEXがどのような値になるかを設定できるわけです。

そしてその設定する値がWS_EX_LAYERED属性です。

これだけでこのウィンドウはレイヤードウィンドウになりました。

さて、次に、ウィンドウの透明化情報を設定していきましょう。

レイヤードウィンドウの透明情報の設定には、
SetLayeredWindowAttributes関数を使います。

BOOL SetLayeredWindowAttributes(
  HWND hwnd,           // レイヤードウィンドウのハンドル
  COLORREF crKey,      // カラーキーを指定する構造体へのポインタ
  BYTE bAlpha,         // ブレンド機能の値
  DWORD dwFlags        // アクションフラグ
);


第1引数には、ハンドル
第2引数、第3引数はひとまず飛ばして、
第4引数は、透明化の方法を指定できます。

LWA_COLORKEYを設定すると、第2引数で指定した色を、透明化することができます。
dglib2と同じようにRGBマクロを使用できます

LWA_ALPHAを設定すると、第3引数で設定した値で、ウィンドウを半透明にすることができます。
設定する値は0~255で、0なら完全透明、255なら完全不透明です。
|演算子を使って両方設定することもできます。

LWA_COLORKEYが指定した色にだけ効果を与えるのと違って、
LWA_ALPHAはウィンドウ全体に効果を与えます。

使用例は、少し長くなるので、サンプルソースを配布します。

こういったものを使えば、デスクトップ上を舞台にしたゲームも作れそうですね。
ウィンドウの形を自分でデザインする
なんてこともできそうです。
いろんな使い道があるので試してみてください。

そ~れ~で~は~(*´∀`)ノ
PR

COMMENT

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

No Title

  • by サード
  • 2012/07/08(Sun)12:36
  • Edit
ん? dglib2って何?
もしかしてバージョンアップしたの?

確か1年次の時に使ってたライブラリですよね、何かバグ修正、関数とか追加されたのかな?

補足:
なるほど・・・便利になりましたね。

No Title

  • by 克兎
  • 2012/07/08(Sun)13:44
  • Edit
色情報の設定が、
もともとは、カラーパレットから色番号を自分で調べて設定してましたが、
COLORREFに統一されました。

あと、C++でも使用可能になりました。

ほかにも何かあるのかもしれないけど、基本的な使い方は変わってません。

ブログ内検索

最新コメント

[01/29 人面犬]
[10/01 8ch]
[09/12 uncle]
[09/10 某卒業生]
[06/07 uncle]

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

テスト

Copyright ©  -- GESブログ --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]