0

私のアプリケーションは DPI 対応です。完全なマニフェストは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
                manifestVersion="1.0">
    <assemblyIdentity name="SlackUI"
                      type="win32"
                      version="1.0.0.0" />
    <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>
</asmv1:assembly>

そして、NotifyIconアイコンのプロパティを次のように設定しています。

notifyIcon.Icon = new Icon(Program.Settings.Data.WhiteNotificationIcon ?
                Properties.Resources.NotifyWhite : Properties.Resources.NotifyColor, SystemInformation.SmallIconSize)

ただし、これは Windows 8.1 システムで 150% 以上の DPI スケーリングでは機能しません。100% に設定するとSystemInformation.SmallIconSize16x16 サイズ (正しい) が報告され、125% に設定すると 20x20 サイズ (正しい) が報告されます。たとえば 150% を超えると、24x24 サイズが報告されるはずですが、代わりに 16x16 が報告され、間違った解像度が読み込まれます。私のアイコンファイルから。

次の記事 ( http://blog.quppa.net/2011/01/07/small-icon-size-dpi-in-windows/ ) を読むと...

WPF と WinForms はどちらも、引数 SM_CXSMICON (小さいアイコンの幅) と SM_CYSMICON (小さいアイコンの高さ) を受け取る Win32 GetSystemMetrics 関数をラップします。

つまり、おそらく自分自身を呼び出す必要はありませんGetSystemMetricsよね?

どうすればこれを解決できますか?

PS: 私が開発中のオープンソース アプリケーションについて話しているので、完全なソース コードを詳しく調べたい場合は、こちら で確認できます

4

1 に答える 1

1

あなたのマニフェストが実際にはその仕事をしていないという強いヒント

そうではない。github SlackUI/SlackUI.csproj ファイルから:

<ItemGroup>
  <None Include="app.manifest">
    <SubType>Designer</SubType>
  </None>
</ItemGroup>

次のようになります

<PropertyGroup>
  <ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>

<ApplicationManifest>これが実行可能ファイルのマニフェストであることを MSBuild に知らせるために必要な、非常に具体的な要素に注意してください。バージョンを .csproj ファイルに貼り付けてビルドし、[ファイル] + [開く] + [ファイル] を使用して bin/Debug ディレクトリから .exe ファイルを選択することで、バージョンをテストしました。RT_MANIFEST ノードを開き、リソース #1 をダブルクリックしました。app.manifest ファイルから変更されたものではなく、コンパイラが自動生成するデフォルトのものでした。

それがうまくいかない理由です。これがどのように起こったのか、私には素晴らしい理論はありません。おそらくあなたが手動で追加したのでしょう。ソリューション エクスプローラー ウィンドウで app.manifest を右クリックし、それを削除して修正します。[プロジェクト] > [新しい項目の追加] > [全般] > [アプリケーション マニフェスト ファイル] を使用します。変更を再度貼り付けます。

于 2015-02-24T01:01:13.407 に答える