2010-11-27 17 views
6

私は、WPFを使ってランダムなアプリケーション用のGUIを開発しました。私はボックスのWPFコントロールのアプリケーションウィンドウに置かれて束を持っている。 「私ができるので、私は、私のアプリケーションを実行すると、Windows 7の拡大鏡アプリケーションを使用してズームする場合(Win key + Plus keyWindowsでWPFアプリケーションをズームすると、ピクセルが表示されるのはなぜですか?

を、何もカスタマイズしないビットマップを使用していなかった、など、拡大GUIはpixels.Iはおそらく間違って表示されていトンそれ以外の場合を説明したが、WPFは、議論に参加するための?

感謝をレンダリング制御などのベクトルを提供することになっていません。

答えて

17

Vistaが最初に出荷され、WPFがバージョン3.0になったとき、組み込みの拡大鏡を使用してズームすると、実際にベクトルベースのスケーリングが行われます。

これは、WPF 3.5サービスパック1が出荷されたときに機能しなくなりました。 (それはsp1の前に3.5で働いていました)。それ以前に働いた理由は、DWM(デスクトップウィンドウマネージャー) - 画面上に表示されているものすべてを表示するWindowsの一部です - MILCORE.DLLを使用してレンダリングします。 WPFのバージョン3.0と3.5もこの同じコンポーネントをレンダリングに使用しました。つまり、すべてのWPFコンテンツはネイティブコンテンツでした。 (実際、DWMを持たないWindows XPでは、MILCORE.DLLはWPFがあなた自身の利益のためにあなたのシステムに置くものですが、VistaとWindows 7に組み込まれています。)WPFがMILCORE.DLLを使ってVista上でレンダリングすると、スケーリングなどのDWMによって適用されるエフェクトもWPFにも適用されます。実際にピクセル化することなくスケールしました。

残念ながら、これはもはやケースではありません。その理由は、WPFが新しいレンダリング機能を追加し始めたからです。 3.5 SP1では、問題の新機能はカスタムピクセルシェーダーのサポートでした。それを可能にするために、マイクロソフトはMILへのアップデートをリリースしなければならなかった。 (Media Integration Layer - 実際のレンダリングを行うビットです)しかし、MILCORE.DLLを更新する立場にはありませんでした。これはWindowsの一部です。画面上に表示されるすべてのものが画面に表示される方法です。 MILCORE.DLLの新しいバージョンをリリースすることは、Windowsへのアップデートを効果的に実行することを意味します。 Windowsのリリーススケジュールは.NETのリリーススケジュールとは無関係であるため、WPFチームが新しい機能を合理的に追加できる唯一の方法は、新しいMILを出荷することでした。 (理論的には、Windows Updateを使用している可能性がありますが、WPFはWindowsとは別の部門のMicrosoftによって所有されているため、この種のことは実際には起こりそうにありません)。

.NET 3.5 sp1の場合、MILはwpf_gfx_vXXXX.dllという別のDLLにあります。ここで、vXXXXはバージョン番号です。 .NET 4.0では、wpf_gfx_v0400.dllです。

WPFは、Windows自体を更新することなく、新しいバージョンごとに新しいレンダリング機能を追加できるという点があります。欠点は、WPFのレンダリングは、Vistaが出荷されたときに一時的に戻っていたため、Windowsと密接に統合されていないことです。あなたが見てきたように、その拡大はそれまでと同じほど楽しいものではありません。

+1

うわー、そのような完全な答え!よくやってくれてありがとう! – Boris

+1

非常に徹底的な答え、+1!驚くべきことですが、驚くべき機能でした。私は、OSレベルの各ウィンドウごとにズームを別々に変えることができたと思っていました。 –

+0

私は実際にグリフィス氏のPluralsightビデオから、Vista上で拡大鏡を再現したことを実感しましたが、Windows 10ではうまくいきませんでした.Ian自身がStackOverflowでアップデートを見つけました。 –

3

あなたがいる理由ですので、拡大鏡アプリケーションは、独自のズーム画像レンダリングを実装WPFはベクトルグラフィックスを使用しますが、この状況ではWPFアプリケーション自体ではありませんズームされた画像をレンダリングする。

Snoopのようなものを使用すると、ズームして拡大縮小したWPFベクターグラフィックスのレンダリングが実際に表示されます。

+0

ありがとうございます。このような方法でMagnifierアプリケーションを開発し、独自の新しいUIレンダリングパラダイム(WPF)を推進しながら、Windows VistaとWindows 7のUIを誇りにしているのは、MicrosoftのUI上で少し愚かであることに同意しますか?同時に? – Boris

+0

@Boris拡大鏡アプリケーションでWPFを特別に処理できないことは残念です。 Snoopは、単一のアプリケーションだけをズームしていますが、似たようなことを行うと確かに実現可能です。 WPFはWindows VistaやWindows 7のUIのUIにはあまり使われていないと私は言います。 –

+0

@chibacityどのようにあなたは正しいですか。まあ、個人的に私はそれが残念だと思います。私はWPFが素晴らしいと思っています。私はマイクロソフトが自社のポリシーをいかに退屈にしているかを知っています。したがって、WPFとしてかなり進歩的なものを抱かないように私には意味をなさないだけです。 – Boris

0

Windows 7の拡大鏡は、実際のアプリケーション画面UIのスナップショットを撮ってから、それを拡大します(WPFアプリケーションでは特別なケースではありません)。もちろん、それがアクセスできるのはピクセルだけであり、シーンの背後で動作するベクトルグラフィックスではありません。

+0

ありがとう、ありがとう。 – Boris

+0

あなたは大歓迎です! – Vlad

-1

Windows-7-Magnifierはピクセルベースですが、Aeroテーマがアクティブであるかどうかに応じて拡大モードが異なります。

  • Areoテーマではズームがピクセル化されています。
  • Areoテーマがないと、ズームがスムーズ(ぼやけ)になります。

Areoテーマのみ他のビュー(「ドッキング」を除く)を選択できます。

関連する問題