2013-04-24 3 views
5

.NET Windowsフォームアプリケーションでは、テキストボックスやボタンなどの基本的なコントロールに、同等のネイティブWin32コントロールを使用しますか? WPFはネイティブではありませんが、Windowsフォームは非常にネイティブであると感じます。 Buttonコントロールのアニメーションは、Win32ボタンのように見えます。基本的な.NET WindowsフォームはネイティブのWin32コントロールを制御しますか?

答えて

7

はい、これらは&hellipで、いくつかの例外があります。

WinFormsの中には、カスタム描画されるものがあります。彼らはネイティブコントロールを使用しますが、オーナー描画をオンにし、C#コードで内部的に描画ロジックの一部を処理します。これの利点は、ボタンのようなものがBackColorプロパティを持っていて、標準のシステムカラーの代わりにユーザー定義のカラーをサポートできることです。一般に、これは避けてください(少なくとも私の意見では)効果が醜いだけでなく、おそらくユーザが彼らが行った配色を選択した理由があるからです。しかし、グラフィックデザイナーは、ユーザーよりもよく知っていると思うことが多いため、オプションが存在します。

このように実装されたコントロールには、描画方法を変更できるようにするFlatStyleプロパティが頻繁に表示されます(たとえば、ButtonBase.FlatStyle)。 FlatStyle.Standardを使用すると、.NET Frameworkは、通常とは異なる設定でコントロールのプロパティをカスタマイズしていなくても、通常のオーナー描画を行います。 FlatStyle.Systemを使用すると、コントロールはオーナー描画やその他のオーバーライドなしにWin32によって直接レンダリングされます。

ボタンの違いをわかりやすくすることができます。 FlatStyle.Systemに設定すると、ボタンの青いホバー効果が次第にフェードイン/フェードアウトします。 FlatStyle.Standardに設定すると、青色の輝きが突然現れ、消えます。閉じるが、全く同じではない。コンボボックスは、少なくともDropDownStyleプロパティがComboBoxStyle.DropDownListに設定されているときは同じことをします。

このFlatStyleでサポートされていない動作を絶対に必要としない限り、このようなプロパティを持つすべてのコントロールをFlatStyle.Systemに設定することをお勧めします。

他にもいくつかの例外があります。一部のWinFormsコントロールはWin32には存在しないため、ネイティブコントロールによってサポートされていません。 DataGridViewはそのようなコントロールの良い例です。

最後に、MenuStripContextMenuStripのコントロールは、完全にC#コードで記述され、WinFormsによって手動で描画されます。それらはネイティブのWin32コントロールによって決してバックアップされません。これは、Windows Vista以降ではひどく醜いので、Office XPスタイルを使用して永遠に邪魔されているためです。それはWindows XP上で見た目は冷静でしたが、後のバージョンでは痛感しました。レンダリングスタイルをProfessionalからSystemに変更することはあまり役に立ちません。

代わりに、これらのコントロールの元のバージョンMainMenuContextMenuをツールボックスに追加する必要があります。最近のバージョンのVisual Studioにはデフォルトでは含まれていませんが、そのまま使用でき、どこにも行きません。ここでも、これらは、ネイティブのWin32メニューで100%サポートされているため、ユーザーのWindowsバージョンに関係なく表示する必要があるため、これらを使用することを強くお勧めします。

+0

+1興味深い。これについての参考資料がありますか? –

+0

@Jayそうではありません。リファレンスソースを見ているように、ドキュメントにはいくつかのヒントがあります。しかし、最高の参考資料は私の経験です。 –

関連する問題