2009-08-07 24 views
2

私はこれがシステムレベルで制御できることを知っていますが、私はシステム設定を無効にして、自分のアプリケーションだけの特定の外観を持っています。私はそれを行う別のWindowsアプリを見たので、これを制御するWindows API関数がなければならないと仮定しています。Windowsフォームの境界線の太さと色を制御するにはどうすればよいですか?

+2

良いことは、あなたがそこに免責事項を入れ、またはあなたが(あなたが間違いなく認識していないよう)あなたがこれを行うにはない伝える10件の回答を得ているでしょう。これは簡単にstackoverflowの最も面倒な側面です。 – MusiGenesis

答えて

2

を使用すると、アプリケーション用のカスタム外観をしたい場合、私はちょうど描くのいずれかによって、自分のフォームのボーダレスを作り、すべてを自分自身を扱うでしょう(私がこれを行うべきではない理由に行く必要はありません)ペイントイベントのフォーム自体、またはResizeイベントの前後のコントロール(パネルなど)を移動します。ドラッグ、サイズ変更、閉じる/最小化などの操作は必要ですが、特に困難なことはありません。

これは、自分でやっていることの基本を示す、同様の質問に対するmy answerです(これはWindows Mobile用ですが、通常のウィンドウでも機能します)。

+0

私は質問をした後、この道を歩みました。私はもっ​​と良い方法があると思っていた。私が自分で作ったものを作っても、ウィンドウのサイズを変更するには、開始サイズ変更のメッセージなどを出してもらえますか?そうではないにもかかわらず、ウィンドウのサイズを変更している間に見られる点線効果を再現することはできません(ウィンドウの「ドラッグ中にウィンドウの内容を表示」が無効になっているとき)。 – Fantius

+0

良い点 - 私はそれについて知らない。私はちょうどあなたがやろうとしているもののように完全に所有者が描かれているWindows上でiTunesをチェックアウトしたところで、ドラッグ中は点線のアウトラインを示していましたが、興味深いことに、通常の点線の境界線と同じではありません彼らはアウトライン自体を処理していることを意味するWindowsウィンドウ。 – MusiGenesis

+1

私はアウトラインが自分自身を実装するのは比較的簡単だと思います。 mousedownイベントでは、透明な背景と点線の境界線を持つ境界線のない2番目のフォームをポップアップし、mouseupイベントまで移動して、実際のフォームを新しい位置に移動します。 – MusiGenesis

2

アプリケーションウィンドウのこれらの外部要素は、まとめてウィンドウ「クロム」と呼ばれ、実際にオペレーティングシステムによってレンダリングされます。各ウィンドウインスタンスの特定の側面(例えば、コントロールボックス、ボーダー、最小/最大ボタンなど)を制御するために、様々なフラグがウィンドウAPIレベルで使用されるが、サイズ変更可能なウィンドウの境界幅はシステム設定均一性を保証し、ウィンドウ単位で構成可能ではありません。

多くの場合、Windows APIと対話することで.NETに公開されていないウィンドウのいくつかの側面を制御することができます.Windows APIのドキュメントを読んでその可能性を判断すると有益です低いレベル。 CreateWindowExのドキュメントを出発点として読むことをお勧めします。

http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx

.NETを使用すると、境界線なし、単一ピクセル幅の境界線、およびサイズ変更可能(太枠)の中から選択することFormBorderStyleプロパティを変更することができます。カスタムを行う場合は、.NETの枠線スタイルをnoneに設定して、ウィンドウクロムを自分でレンダリングする責任を負う必要があります。これには、独自のキャプションバー、最小/最大ボタン、およびウィンドウの境界線をレンダリングする必要があります。軽い仕事ではありませんが、多くのアプリがそうしています。あなたが本当に望むのは、境界線の幅を制御することです。

この記事では、WPFでこのタスクにどのようにアプローチするかについて説明します。

Window Chrome In WPF

+0

+1これは比較的軽い仕事です。通常はそれほど価値はありませんが、全く難しくありません。 – MusiGenesis