|
|
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
|
|
2018/9/22(Sat) 15:01:11|NO.85409
さらに調べていたらAeroの関係か分からないですがWindows7と8では描画されないみたいと
どこかのブログに書いてありました。多分10でも無理でしょうね・・
DrawAnimatedRectsは諦めるとして、もし他にアニメーションを復活させる方法などがあれば教えて欲しいです。
|
|
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
|
|
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
|
|
2018/9/24(Mon) 14:58:03|NO.85436
>最大化時にウィンドウの位置がずれる問題を修正
ありがとうございます!
|
|