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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0922
ham枠なしウィンドウにDrawAnimatedRectsでアニメーションを6解決


ham

リンク

2018/9/22(Sat) 10:22:44|NO.85403

bgscrなどで枠なしウィンドウにすると、"開く","閉じる","最小化","最大化"など
アニメーションが消えてしまって寂しいのでどうにか復活させられないかと思い、
調べまくってようやくDrawAnimatedRectsという関数?を見つけました。
https://msdn.microsoft.com/ja-jp/library/cc428453.aspx

これで復活させられるのかは分かりませんが、試したくて初めて自分で外部DLL呼び出してみたんですけど
全くアニメーションしてくれません...
どこかが間違っているのでしょうか?


#uselib "user32.dll" #func GetWindowRect "GetWindowRect" int,var #func DrawAnimatedRects "DrawAnimatedRects" int,int,var,var #define IDANI_OPEN 1 #define IDANI_CLOSE 2 #define IDANI_CAPTION 3 dim rect,4 bgscr 0,320,240 GetWindowRect hwnd,rect rect2=0,0,ginfo_dispx,ginfo_dispy button gosub"実行",*test button goto"終了",*exit stop *test DrawAnimatedRects hwnd,IDANI_CAPTION,rect,rect2 mes stat //0以外なら成功? return *exit end



この記事に返信する


ham

リンク

2018/9/22(Sat) 15:01:11|NO.85409

さらに調べていたらAeroの関係か分からないですがWindows7と8では描画されないみたいと
どこかのブログに書いてありました。多分10でも無理でしょうね・・

DrawAnimatedRectsは諦めるとして、もし他にアニメーションを復活させる方法などがあれば教えて欲しいです。



ham

リンク

2018/9/22(Sat) 15:42:27|NO.85412

IUIAnimationManagerインターフェイスというものを見つけたのですが
これはHSPでも使用できるものなのでしょうか?
https://msdn.microsoft.com/ja-jp/library/windows/desktop/dd371687(v=vs.85).aspx

C++のソースなら見つかりましたが難しすぎてほぼ分からないです。
自分にはまだ早すぎますかねw
https://dev.activebasic.com/egtra/2014/11/25/688/



いののて

リンク

2018/9/23(Sun) 21:33:57|NO.85426

タイトルバーが無いとアニメーションされないので、
ウィンドウ枠の幅を0にして疑似枠無しウィンドウを作るとアニメーションされるようになります。

#include "user32.as"
#define WM_NCCALCSIZE 0x0083 screen 0, ginfo(20), ginfo(21), , , , 500, 500 oncmd gosub *OnNCCalcSize, WM_NCCALCSIZE SetWindowPos hwnd, 0, 0, 0, 0, 0, 0x0027 //ウィンドウ枠を再描画 //テストボタン button gosub "最小化", *b button gosub "最大化", *b button gosub "元に戻す", *b button gosub "終了", *b stop *OnNCCalcSize //非クライアント領域の大きさを計算せずに処理を返すと //ウィンドウ枠が無くなる return 0 *b switch stat case 0 sendmsg hwnd, 0x0112, 0xF020, 0 swbreak case 1 sendmsg hwnd, 0x0112, 0xF030, 0 swbreak case 2 sendmsg hwnd, 0x0112, 0xF120, 0 swbreak case 3 sendmsg hwnd, 0x0112, 0xF060, 0 swbreak swend return



ham

リンク

2018/9/24(Mon) 07:33:22|NO.85430

>いののて様
なるほど..そんな簡単に出来てしまうなんて凄いです・・・w
DwmExtendFrameIntoClientAreaとか使ってクライアント領域無理やり広げたり数えきれないほど
色々試していたんですが、おかげさまで解決しました。
これでようやく次に進めそうです^^
ご回答ありがとうございました!



いののて

リンク

2018/9/24(Mon) 13:19:11|NO.85435

最大化時にウィンドウの位置がずれる問題を修正

#include "user32.as"
#define WM_NCCALCSIZE 0x0083 screen 0, ginfo(20), ginfo(21), , , , 500, 500 oncmd gosub *OnNCCalcSize, WM_NCCALCSIZE SetWindowPos hwnd, 0, 0, 0, 0, 0, 0x0027 //ウィンドウ枠を再描画 //テストボタン button gosub "最小化", *b button gosub "最大化", *b button gosub "元に戻す", *b button gosub "終了", *b stop *OnNCCalcSize //非クライアント領域の大きさを計算せずに処理を返すと //ウィンドウ枠が無くなる if wparam==0: return if IsZoomed(hwnd){ //最大化時のサイズ調整 dupptr cspm, lparam, 52 cspm(0) += GetSystemMetrics(0x0007) cspm(1) += GetSystemMetrics(0x0008) cspm(2) -= GetSystemMetrics(0x0007) cspm(3) -= GetSystemMetrics(0x0008) } return 0 *b switch stat case 0 sendmsg hwnd, 0x0112, 0xF020, 0 swbreak case 1 sendmsg hwnd, 0x0112, 0xF030, 0 swbreak case 2 sendmsg hwnd, 0x0112, 0xF120, 0 swbreak case 3 sendmsg hwnd, 0x0112, 0xF060, 0 swbreak swend return



ham

リンク

2018/9/24(Mon) 14:58:03|NO.85436

>最大化時にウィンドウの位置がずれる問題を修正
ありがとうございます!



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