|
|
2023/11/22(Wed) 08:45:55|NO.100648
HSP3でMicaを表示することってできないですかね?
DwmSetWindowAttributeのDWMWA_MICA_EFFECTを呼び出せば、Micaを適用できることを知り、ググって調べてみたのですが日本語の情報がどこにも載っていません。
どうやったらMicaのUIを表示させることはできますか?
https://tvc-16.science/mica-wpf.html
|
|
2023/11/22(Wed) 18:36:53|NO.100656
試行錯誤してたら、タイトルバーの色を変えられる方法を知ったのですが、Micaを適用する方法を知らない…。
#uselib "dwmapi.dll"
//#func global DwmGetWindowAttribute "DwmGetWindowAttribute" int, int, int, int
#func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int
#define DWMWA_USE_HOSTBACKDROPBRUSH 17
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
#define DWMWA_WINDOW_CORNER_PREFERENCE 33
#define DWMWA_BORDER_COLOR 34
#define DWMWA_CAPTION_COLOR 35
#define DWMWA_TEXT_COLOR 36
#define DWMWA_VISIBLE_FRAME_BORDER_THICKNESS 37
#define DWMWCP_DEFAULT 0
#define DWMWCP_DONOTROUND 1
#define DWMWCP_ROUND 2
#define DWMWCP_ROUNDSMALL 3
#define DWMWA_SYSTEMBACKDROP_TYPE 38
#define DWMWA_MICA_EFFECT 1029
#define ctype RGB(%1,%2,%3) (($FF & %1)|(($FF & %2) << 8)|(($FF & %3)<<16))
//タイトルバーの色を変更
opt = RGB(80,25,0)
DwmSetWindowAttribute hwnd,DWMWA_CAPTION_COLOR,varptr(opt),4
|
|
2023/11/23(Thu) 22:48:04|NO.100665
色々調べて試行錯誤して、なんとかマイカらしきものは実現できたようですが、
このやり方だと以下のような制限があるようで。
・DwmExtendFrameIntoClientAreaを利用してフレーム部分を拡張させることで、
その拡張された部分にマイカの効果が適用される。
・ただし、DWMWA_USE_IMMERSIVE_DARK_MODEを使用してダークモードにしないと、
マイカが適用された部分への描画はほとんど反映されず、
実用的ではない。
・マイカ適用範囲においては、色が黒に近い部分ほどマイカの効果は強くなり、
明るい色になるほどマイカの効果は薄れていく。
私のやり方だと、リンク先のサンプルのように「自由自在」とはいかないようです。
#uselib "dwmapi.dll"
#func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int
#func global DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int
#define DWMWA_USE_HOSTBACKDROPBRUSH 17
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
#define DWMWA_SYSTEMBACKDROP_TYPE 38
opt=1
DwmSetWindowAttribute hwnd,DWMWA_USE_IMMERSIVE_DARK_MODE,varptr(opt),4 //このやり方だと実質ダークモード専用につき
dim margins,4
margins=-1,0,0,0 //左、右、上、下のマージンを指定。
//1番目の要素に-1を指定すればウィンドウ全体にマイカを適用可能。
DwmExtendFrameIntoClientArea hwnd,varptr(margins)
color 0,0,0 : boxf
pos 0,0 : color 255,255,255 : mes "ABCDEF"
opt = 4 //2はマイカ、3はアクリル、4はマイカAlt。0や1だとマージンの指定範囲によってはかなり珍妙な表示になってしまう。
DwmSetWindowAttribute hwnd,DWMWA_SYSTEMBACKDROP_TYPE,varptr(opt),4
stop
| |
|
2023/11/23(Thu) 22:50:16|NO.100666
妥協案として、ウィンドウの周辺の部分にだけマイカを適用し、
そこを避けるようにして描画するという手もあるのかな、と。
#include "user32.as"
#uselib "dwmapi.dll"
#func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int
#func global DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int
#define DWMWA_USE_HOSTBACKDROPBRUSH 17
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
#define DWMWA_SYSTEMBACKDROP_TYPE 38
dim margins,4
margins=20,20,40,40 //左、右、上、下のマージンを指定。
//1番目の要素に-1を指定すればウィンドウ全体にマイカを適用可能。
DwmExtendFrameIntoClientArea hwnd,varptr(margins)
color 30,30,30 : boxf
opt = 4 //2はマイカ、3はアクリル、4はマイカAlt。0や1だとマージンの指定範囲によってはかなり珍妙な表示になってしまう。
DwmSetWindowAttribute hwnd,DWMWA_SYSTEMBACKDROP_TYPE,varptr(opt),4
hwnd0=hwnd
bgscr 1,600,400 : gsel 1
SetParent hwnd,hwnd0 : width ,,20,40
mes "あいうえお"
stop
|
|
2023/11/24(Fri) 17:21:27|NO.100671
そんな方法があったとは…。
DwmExtendFrameIntoClientAreaはWindows 7で使っていたのですが、応用すればこういうこともできるんですね…。
↓ちなみにこのスクリプトと併用することは可能でしょうか?
https://waiei.blog.fc2.com/blog-entry-627.html
DWMWA_BORDER_COLORでタイトルバーの色を変更できるの知ったのですが、マイカとアクリルを反映させる方法ってないんですかね…。
#uselib "dwmapi.dll"
#func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int
#func global DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int
#define DWMWA_USE_HOSTBACKDROPBRUSH 17
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
#define DWMWA_SYSTEMBACKDROP_TYPE 38
#define DWMWA_BORDER_COLOR 34
#define DWMWA_CAPTION_COLOR 35
#define ctype RGB(%1,%2,%3) (($FF & %1)|(($FF & %2) << 8)|(($FF & %3)<<16))
//タイトルバーの色を変更
opt = RGB(80,25,0)
DwmSetWindowAttribute hwnd,DWMWA_CAPTION_COLOR,varptr(opt),4
dim margins,4
margins=-1,0,0,0 //左、右、上、下のマージンを指定。
//1番目の要素に-1を指定すればウィンドウ全体にマイカを適用可能。
DwmExtendFrameIntoClientArea hwnd,varptr(margins)
color 0,0,0 : boxf
pos 0,0 : color 255,255,255 : mes "ABCDEF"
opt = 2 //2はマイカ、3はアクリル、4はマイカAlt。0や1だとマージンの指定範囲によってはかなり珍妙な表示になってしまう。
DwmSetWindowAttribute hwnd,DWMWA_SYSTEMBACKDROP_TYPE,varptr(opt),4
stop
| |
|
2023/11/24(Fri) 18:31:52|NO.100672
たしかリンク先の方法はWindows7(と、Vista?)でしか
使えない方法だったと記憶しています。
(実際私が試してみても何も起きませんでした)
Windows11では過去にこういう方法↓でアクリル表示ができたのですが、
今では使えなくなってしまったようです。
https://hsp.tv/play/pforum.php?mode=pastwch&num=90762
>DWMWA_BORDER_COLORでタイトルバーの色を変更できるの知ったのですが、マイカとアクリルを反映させる方法ってないんですかね…。
私の勘違いでなければ、NO.100671のスクリプトで、タイトルバーの色が変わった上で
タイトルバー以外の部分にマイカが反映されているように思いますが。
(DWMWA_USE_IMMERSIVE_DARK_MODEでダークモードにした場合も同様)
壁紙はOS付属の派手な色の壁紙にして検証しています。
|
|
2023/11/24(Fri) 22:09:45|NO.100674
>↓このスクリプトを少し改造して、DWMWA_SYSTEMBACKDROP_TYPEを与えてみたら反映されてました。
申し訳ありません、その通りやってみたら上手くできました。
下の方のコードしか試しておらず、早合点しました。すみませんでした。
>UWP以外でモダンUIを有効にする方法として、DWMWA_USE_HOSTBACKDROPBRUSHというのを見つけたのですが、具体的にはどのように使用すればいいのでしょうか?
その文書や、文書からのリンク先も読みましたが、申し訳ありませんが、
HSPでどう扱えばいいのかは見当もつきません。(何かしらのDLLに登録されている関数を呼び出すだけで済む話ではない模様?)
DWMWA_USE_HOSTBACKDROPBRUSHでググっても情報は無いに等しかったので……。
ダークとかライトだけでなく、ウィンドウ全体を自分の任意の色にしたい、ということであるなら、
ちょっと力技ですが、以下のようにbgscrでタイトルバーの無いウィンドウを作るという形は
どうでしょうか?
#uselib "dwmapi.dll"
#func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int
#func global DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
#define DWMWA_SYSTEMBACKDROP_TYPE 38
bgscr 0,640,480
opt=1
DwmSetWindowAttribute hwnd,DWMWA_USE_IMMERSIVE_DARK_MODE,varptr(opt),4 //このやり方だと実質ダークモード専用につき
dim margins,4
margins=-1,0,0,0 //左、右、上、下のマージンを指定。
//1番目の要素に-1を指定すればウィンドウ全体にマイカを適用可能。
DwmExtendFrameIntoClientArea hwnd,varptr(margins)
opt = 2 //2はマイカ、3はアクリル、4はマイカAlt。0や1だとマージンの指定範囲によってはかなり珍妙な表示になってしまう。
DwmSetWindowAttribute hwnd,DWMWA_SYSTEMBACKDROP_TYPE,varptr(opt),4
objsize 30,30 : pos ginfo_winx-30,0 : button goto "X",*exit
color 0x10,0,0 : boxf //マイカを反映させるため、背景の色はできるだけ暗い色にする
pos 0,0 : color 255,255,255 : mes "ABCDEF"
onclick gosub *click
d_flag=0
x_off=0 : y_off=0
repeat
if d_flag {
getkey key,1
if key {
width ,,ginfo_mx-x_off,ginfo_my-y_off
} else {
d_flag=0
}
}
await 33
loop
*click
if iparam : return //左クリック以外は戻る
d_flag=1
x_off=ginfo_mx-ginfo_wx1
y_off=ginfo_my-ginfo_wy1
return
*exit
end
| |
|
2023/11/29(Wed) 08:37:49|NO.100689
返信が遅くなりましたが、ボタンやチェックボックスなどモダンUIにすることってできない感じですかね?
bgscrで枠なしウィンドウを使う方法しかなかったんですね…。
とりあえず、解決にしておきます。
|
|