松尾です。 > 現在、アイコンの高 DPI に対応できているのは Tera Term と TTSSH の > About ダイアログだけのようです。 そうですね。 ダイアログ上に表示しているアイコンのDPIを調整する部分だけですね。 ダイアログ上の画像はicoに入っていて、 DPIに応じて適切なサイズのものを表示する、 という感じです。 システムに利用されるアイコンは 大と小の2つをセットすることができて、 次のところで使われているそうです。 - 使用されるアイコン(予想) - 大きなアイコン(100%時32×32 , WM_SETICON + ICON_BIGでセットする) - タスクバーのアイコン - タスクの切り替え(Alt + Tab)でのアイコン - タスクビュー(Windows ロゴ キー + Tab)でのアイコン - 小さなアイコン(100%時16×16, WM_SETICON + ICON_SMALLでセットする) - アプリのウィンドウのタイトルバーのアイコン タスクマネージャなどで表示しているアイコンは exeファイルから画像を取り出しているのではないか予想です。 (WM_GETICONで他のアプリのアイコンを取り出せるのだろうか?) タイトルバーのアイコンはウィンドウのいるディスプレイに合わせて アイコンを設定するのがよさそうです。 今は起動したときだけアイコンをセットしているので - ウィンドウを生成したとき - WM_DPICHANGED を受信したとき(解像度が変わったとき) でアイコンをセットすればよさそうです。 解像度に大きな差があるマルチディスプレイ環境だと タスクバーのアイコンがざらざらに見えたり 小さく崩れたりしそうな気はします。 https://nishy-software.com/ja/dev-sw/windows-high-dpi-desktop-app-5/ このページの説明によると、 大きなアイコンは、 メインディスプレイのDPIスケール率に対応したサイズの アイコンを利用するのがよい、 とのこと。 どうしたものでしょうか。テストが必要そうです。 とりあえず解像度が変わったときどうするかは、 ダイアログ上のアイコン表示と同じ作戦で SetDlgItemIcon()@dlglib_cpp.cpp okじゃないかと思います。 流れはこんな感じ。 - ウィンドウのいるモニタを調べて - モニタの解像度をしらべて - ↑2つ、GetMonitorDpiFromWindow()@ttlib_static.c - 解像度に合わせたアイコンサイズを調査して - LoadIconWithScaleDown() でロードして - ↑2つ TTLoadIcon()@dlglib_cpp.cpp - アイコンをセットする - 必要なら古いアイコンを破棄 - WM_SETICON + ICON_SMALL でセット - WM_SETICON + ICON_BIG ★これもやるべきか? 通知領域(システムトレイ)のアイコンは、 ttxssh以外の時は、 WM_GETICON + ICON_SMALL で取ってきているので 16pixelになるのかな。 CreateNotifyIcon()@teraterm/ttpcmn/ttcmn_notify.cpp 192行目付近 ttsshの時は、 ttsshアイコン(サイズ0を指定しているのでディスプレイに合わせたサイズ?) ttssh2/ttxssh/ttxssh.c 705行目付近 になると思います。 通知領域はプライマリディスプレイだけなので(確かそうだったはず) 通知領域用の解像度がありそうですね。 なかなかボリュームがありそうです。