10

標準の16X16ピクセルアイコンとは異なる形状のアイコンをWindowsフォームの左上隅に表示することはできますか?

Skypeには標準よりもはるかに広いアイコンがあるようです。

ここに画像の説明を入力してください

Windowsフォームアプリで可能ですか?

4

4 に答える 4

4

これを行うことはできますが、アイコンを大きくするだけの価値よりもおそらく手間がかかります。

ハンスは、この質問の答えを理解するために必要な情報を大まかに指摘する記事を投稿しましたが、答え自体は投稿していないので、明確にします。

これを行う古い(Vista以前の)方法WndProcは、フォームのメソッドをオーバーライドしてメッセージを処理することWM_NCPAINTです。これは、アイコンだけでなく、ウィンドウフレーム全体(ウィンドウの境界線、タイトル、閉じる/復元アイコンなど)を描画する責任があることを意味します。つまり、これは比較的小さなことを行うための多大な労力です。 。

これを行うための新しい(Vista以降の)方法は、DWM APIを使用することです。このAPIは.NetFrameworkを介して直接公開されないため、C#でこれにP/Invokeを使用する必要があることに注意してください。やりたいことは、「拡張フレームウィンドウでの描画」というタイトルのセクションです。このセクションでは、通常のクライアント領域の外側にウィンドウフレーム内に描画する領域を拡張します。これは以前よりも面倒ではありませんが(閉じるボタンなどを描画する必要はありません)、サイズ変更のためのヒットボックステストなど、通常は行わない多くのことに対して責任を負うことを意味します。と移動します。

基本的に、大きなアイコンを提供するほど単純ではなく、ほとんどのアプリケーションでは、おそらくその価値よりもはるかに多くの労力がかかりますが、C#でこれを行うことができ、本当に試してみたい場合は、その記事から始めることができます。

于 2012-05-08T16:30:38.920 に答える
2

これを行うためのプレーンなコード方法を探していることは知っていますが、管理されているDevExpressをチェックしてください(サードパーティは私を許します)、グーグルで検索してください。このスレッドを見て、devexpressでサポートと質問を始めました。あなたが興味を持っているかもしれないいくつかの印象的な結果を得ました。

これが私が入れたチケットです... http://www.devexpress.com/Support/Center/Issues/ViewIssue.aspx?issueid = Q399941

結果は次のとおりです... http://www.devexpress.com/Support/Center/GetSCAttachment.ashx?id = 684270b5-faed-415e-9010-64338523f8cf

これまでのところ、これをXp、Vista、およびWindows 7で使用しましたが、winformsのみを使用しても問題はありませんでした。

さまざまなバージョンのWindowsでWindowsAPIが希望どおりに機能しない場合に、これが役立つか、別のオプションが提供されることを願っています。

ありがとう、デビッド

于 2012-05-11T12:32:51.170 に答える
0

ICO正確に画像形式を意味するのであれば、それがアイコンだとは思わないでください。Skypeウィンドウが間違いなくownerdrawウィンドウであることを考えると、その画像は潜在的に任意の形式にすることができます。

秘訣は、基本的に、「アイコン」のある色(背景色)のピクセルをスキップして画像をレンダリングすることです。したがって、「透明度」でレンダリングします。

この記事はあなたにヒントを与えることができます:

アルファブレンディングを使用して透明な画像と形状を描画する

古いですが、常に良いものです。

于 2012-05-08T15:58:23.897 に答える
0

はい。WndProcをオーバーライドし、WM_NCPAINTを実装します。

于 2012-05-08T16:00:17.457 に答える