|
本帖最后由 红毛樱木 于 2022-9-25 23:13 编辑
- ENVI^ ENVIMODE=1
- ENVI^ ForceLocal=1
- CALL INITVAR_DPI
- CALL @WinTEST
- _SUB WinTEST,W570H340,主窗口,,,,, %&Scale_CMD%
- ENVI &Page1_WID=
- SWIN -:PAGE1:-,L9T10W545H250,,0x1C0
- ENVI @PAGE1.ID=?&PAGE1_Wid
- ITEM Button1,L386T270W168H28,设置PAGE1内容,CALL SWIN_CHECK
- _END
- _SUB PAGE1,W407H300,WDT_P1,,,,, %&Scale_CMD%
- ENVI &Page1_WID=%&__WinID%
- LABE Label1,L12T20W228H48,请点击"打开"按钮以浏览文件000。
- CHEK _CHEK,L12T50W70H20,OneDrive,,
- EDIT -vcenter:-6 _EDIT,L85T50W305H20,54321,,0x8,,
- _END
- _SUB SWIN_CHECK
- ENVI @PAGE1:Label1.visible=0
-
- ENVI @PAGE1:_EDIT=Test
- ENVI @PAGE1:_CHEK.check=1
- ENVI @PAGE1:_CHEK.enable=0
-
- MESS= ____EDIT=%_EDIT%\n_CHEK_E=%_CHEK.enable%\n_CHEK_V=%_CHEK.visible%\n_CHEK_C=%_CHEK.check%@%~0
- _END
- _SUB INITVAR_DPI *
- //开启DPI感知,这样系统DPI优先,当系统DPI大于96时,就使用系统的DPI。
- //自定义DPI缩放 SetProcessDPIAwareness 用参数2,随系统DPI自动拉伸缩放用参数1。
- CALL $User32.dll,SetProcessDPIAware //9600(文件版本第3段)以下系统,开启DPI感知
- CALL $Shcore.dll,SetProcessDPIAwareness,#1 //9600(文件版本第3段)或以上系统,开启DPI感知
- CALL $--qd --bool User32.dll,SetProcessDPIAwarenessContext,#-4 //15063(文件版本第3段)或以上系统,界面随DPI动态拉伸。
- SET &hdcCount=0
- LOOP #1=1,
- {*
- CALL $--ret:&&hdc User32.dll,GetDC,#0 //获取显示器的句柄
- CALC #&&hdcCount=%&hdcCount%+1
- IFEX $%&hdcCount%>50, EXIT
- IFEX $%&hdc%>0, EXIT
- WAIT 0.1
- }
- SET &Scale_CMD=-scale -scalef
- IFEX $%&hdc%>0,
- {*
- CALL $--ret:&LogPixeLsx Gdi32.dll,GetDeviceCaps,#%&hdc%,#88 //获取显示器横向DPI,LogPixeLsx#88(纵向LogPixeLsx为#90,两个值是一样的)。
- SET &Scale_CMD=-scale:%&LogPixeLsx% -scalef:%&LogPixeLsx%
- }
- _END
复制代码 SWIN和TABS的层级问题比较绕,又想用ENVI^ ForceLocal=1的话,按上面SWIN -:PAGE1:-,L9T10W545H250,,0x1C0这样吧。
我个人不建议用ENVI^ ForceLocal=1模式,虽然省事但是代码量巨大的时候就比较懵逼了。
我喜欢写变量的时候规规矩矩的写成
ENVI &a=和ENVI &&a=
%&a%和%&&a%
这样子看代码比较清晰
|
|