Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016/12/11 (日)

フェードアウトも出来たっぽい~

| 19:07 | フェードアウトも出来たっぽい~ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - フェードアウトも出来たっぽい~ - 雪乃☆雫のなでしこ日和 フェードアウトも出来たっぽい~ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 うぇいくさまに教えを頂き、取りあえずここをのぞいてみたところ・・・

https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms632669(v=vs.85).aspx

 なんてこった。どこで調べたらいいか分からんと言っていた、オプションの値の数値が、ふつーにちゃんと書いてあるじゃん!

 して、ぐーぐる翻訳さまの力を借りて内容を確認してみると・・・

値の意味

AW_ACTIVATE
0x00020000
ウィンドウをアクティブにします。 AW_HIDEでこの値を使用しないでください。

AW_BLEND
0x00080000
フェード効果を使用します。このフラグは、hwndがトップレベルのウィンドウである場合にのみ使用できます。

AW_CENTER
0x00000010
AW_HIDEが使用されている場合はウィンドウを内側に折りたたんで表示し、AW_HIDEを使用しない場合は外側に展開するようにします。さまざまな方向フラグは効果がありません。

AW_HIDE
0x00010000
ウィンドウを隠す。デフォルトでは、ウィンドウが表示されます。

AW_HOR_POSITIVE
0x00000001
ウィンドウを左から右にアニメーション表示します。このフラグは、ロールアニメーションまたはスライドアニメーションで使用できます。 AW_CENTERまたはAW_BLENDとともに使用すると無視されます。

AW_HOR_NEGATIVE
0x00000002
ウィンドウを右から左にアニメーション表示します。このフラグは、ロールアニメーションまたはスライドアニメーションで使用できます。 AW_CENTERまたはAW_BLENDとともに使用すると無視されます。

AW_SLIDE
0x00040000
スライドアニメーションを使用します。デフォルトでは、ロールアニメーションが使用されます。このフラグは、AW_CENTERとともに使用する場合は無視されます。

AW_VER_POSITIVE
0x00000004
ウィンドウを上から下にアニメーション表示します。このフラグは、ロールアニメーションまたはスライドアニメーションで使用できます。 AW_CENTERまたはAW_BLENDとともに使用すると無視されます。

AW_VER_NEGATIVE
0x00000008
ウィンドウを下から上にアニメーション表示します。このフラグは、ロールアニメーションまたはスライドアニメーションで使用できます。 AW_CENTERまたはAW_BLENDとともに使用すると無視されます。

 こんな感じ。

 あれれ~? AW_BLENDの所、別にAW_HIDE フラグと同時にセットするなとは書いてない~。

 して、代わりに「hwndがトップレベルのウィンドウである場合にのみ使用できます」と書いてるるる。要するに、親ウィンドウにしか使えない的な?

 ってことは、フェードが使えるのはメインのフォームのみで、ボタンなどには使えなさそう

 試してみると、確かに、ボタンのロールイン、スライドインは出来ましたが、フェードインは利かず、パッと現れます。

 んなコト日本語のページには書いてなかったよ!

 ……というわけで、やっぱりこっちの情報が正しそう

 それなら!というわけで、恐る恐る窓フェードアウトも作ってみた。(やるなと言われたら、素直にやらない、ビビリなのです;)

 ちなみに前の窓フェードインは、アクティブにするのを忘れていたので、オプションを追加した。

#-----------------------------------------------------------
●窓フェードイン({グループ=?}OBJを{整数=500}Timeで)
  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,$80000||$20000)
  OBJ→可視はオン。

●窓フェードアウト({グループ=?}OBJを{整数=500}Timeで)
  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,$80000||$10000)
  OBJ→可視はオフ。
#-----------------------------------------------------------
●窓アニメーション({グループ=?}OBJ,Time,A,OffOn,Slide)
  もし、(A=「左から右」)ならば、Flag=$1
  違えばもし、(A=「右から左」)ならば、Flag=$2
  違えばもし、(A=「上から下」)ならば、Flag=$4
  違えばもし、(A=「下から上」)ならば、Flag=$8
  違えばもし、(A=「中央」)ならば、Flag=$10
  違えばもし、(A=「左上から右下」)ならば、Flag=$1||4
  違えばもし、(A=「右上から左下」)ならば、Flag=$2||4
  違えばもし、(A=「左下から右上」)ならば、Flag=$1||$8
  違えばもし、(A=「右下から左上」)ならば、Flag=$2||$8
  違えば、Flag=$1
  もし、OffOn=オフならば、Flag=Flag||$10000
  違えば、Flag=Flag||$20000
  もし、Slide=オンならば、Flag=Flag||$40000

  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,Flag)
  OBJ→可視はオン。
#-----------------------------------------------------------
●AniWin(hwnd,dwTime,dwFlags) =DLL("user32.dll",
"BOOL AnimateWindow(
  HWND hwnd,     // アニメーション化するウィンドウのハンドル
  DWORD dwTime,  // アニメーションの時
  DWORD dwFlags  // アニメーションの種類
)")
#-----------------------------------------------------------
#以下はテスト
!母艦設計=『母艦の可視はオフ』

0.5秒待つ
文字サイズは25

母艦白色画面クリア基本Xは10。基本Yは10。
『フェードイン・アウトの実験』と表示母艦を1000で窓フェードイン。
2秒待つ母艦を1000で窓フェードアウト。
2秒待つ終わる。
#-----------------------------------------------------------

 とりあえず、できた~♪

 ・・・のですが、母艦ボタンなどの部品が乗ってた場合、ボタンなどはフェードせず、母艦表示されてからパッと出てくるみたい。(フェードアウトの時は、母艦と一緒にじわじわ消えてく)

 これはおらく仕様で、しょうが無いんだろうと思う。

 それはまあいいんだけど、母艦を(どの方法ででも)アウトした後、再びフェードインすると、ボタンが消えたまま出てこないんだよね~。(ロールやスライドでは無問題)

 なんでだ;

chocochoco2016/12/11 22:13WindowsAPIを調べるのは大変ですが、ぜひ頑張ってください。
私も今、Windows終了時に更新プログラムを入れて終了させる所で唸ってます(

気が付いたら、もうクリスマスがあって、新年ですねぇ。
来年もよろしくお願いします!

雪乃☆雫雪乃☆雫2016/12/12 17:30choco さま、コメントありがとうございます☆
なんかもう一年があっという間ですね~><
しかし、今年は、みなさまのお影で急に賢くなった一年でした♪
来年もよろしくお願いします~!!

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20161211