高 DPI テスト exe
先日の exe をテストしていると…
高 DPI をテストするために,次の様なコードの exe を作成.
void CT_aesDlg::OnDropFiles(HDROP hDropInfo)
{
v_tstring drop_files = ::DropFilesTo(hDropInfo) ;
for (size_t index=0 ; index<drop_files.size() ; index++) {
tstring drop_file = drop_files[index] ;
tstring ext = ::Path_GetExtLow(drop_file) ;
if (ext != _T("exe")) { continue ; }
{
S_Exec se ;
se.SetFile(drop_file.c_str()) ;
se.Execute() ;
}
}
CDialog::OnDropFiles(hDropInfo);
}
この exe に,他の exe をドロップして起動すると,「高 DPI スケール設定」が引き継がれる.
これらの設定は,次の所に持っている?
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
A ~ HIGHDPIAWARE
S ~ DPIUNAWARE
E ~ GDIDPISCALING DPIUNAWARE
それぞれを実行すると表示が異なることはわかるが…
左から,「システム」,「システム(拡張)」,「アプリケーション」.
「システム」と「システム(拡張)」を区別する方法がわからない.
また「システム(拡張)」.exe で,何かの情報の取得が違っていて 表示が正しくない ものと思う.
::GetDeviceCaps の情報の表示は dc.DrawText(str,rect,DT_LEFT) としている.
この時,表示するフォントを指定していないため,「アプリケーション」では小さくなってしまう.
CFont::CreatePointFont などを呼ぶことで対応可能.