Windowsフォームを使用して新しいVisualStudio2012メインウィンドウで表示できるのと同じアルファボーダー効果を実現するにはどうすればよいですか?その窓は光っているようです。
4 に答える
したがって、それが最善の方法かどうかはわかりませんが、Spy++ (32 ビット) を使用してウィンドウを見ると、Visual Studio のメイン ウィンドウの下に 4 つの "VisualStudioGlowWindow" オブジェクトが表示されていることがわかります。
メッセージを Spy++ にフックしました。ご想像のとおり、4 つのウィンドウはフォームの周りの 4 つの光る境界線を表しています。さらに調べてみると、これら 4 つの「グロー ウィンドウ」が WS_EX_LAYERED 拡張ウィンドウ スタイルを実装しているため、グロー自体は (私が知る限り) WPF で行われていないことがわかります。
うまくいけば、これでいくつかの問題が解決します。
私の知る限り、このクロムとカスタム WPF 境界線を組み合わせて使用することで、WPF でそれを行うことができます。(WPFと比較して)スタイリングオプションが限られているため、WinFormsでできるかどうかはわかりません。とにかく彼らは WPF を使用しています。
Visual Studio 2012 は、ネイティブの Win32 関数を使用してウィンドウの境界線を描画します。これは、WPF や WindowsForms とは関係ありません。両方で実行できます。
グローは、メイン ウィンドウの上の透明なウィンドウにレンダリングされます。メイン ウィンドウは DWM API を呼び出してガラス領域を 0 に設定します。この方法で、元の境界線とシステム ボタンの上に描画できます。これが正しい方法です。
WPF シェル (http://archive.msdn.microsoft.com/WPFShell) のコードを参照して、ガラスを削除するために DWM がどのように呼び出されるかを確認できます。必要なのはウィンドウへのハンドル (IntPtr) だけなので、WPF と互換性があるように記述されているという事実は重要ではありません。
WindowsForms コードベースがある場合は、WPF に移行しないでください。WPF は、最新の .NET Framework リリースでは改善されておらず、そのチームが Windows 8 チームに統合されているため、改善や新機能へのロードマップはありません。
フォーム全体の描画を自分で処理したい場合を除き、できません。Visual Studio 2010 と Visual Studio 2012 は WPF の上に書かれており、フォームではなく Windows を使用しているためです。