更新:数日間、透明性をいじるのをやめました。今夜またいじり始めました。Hans Passant のソリューションを使用して新しい結果を得ました: http://img3.imageshack.us/img3/4265/icontransp.jpg
![]()
Passant のソリューションは、透明な背景のグラデーションの問題を解決します。ただし、アイコンの透明な色がフォームの BackColor と混ざり合っているという問題がまだ発生しています。上の画像では、アイコンのさまざまな部分の周りにフクシアが見られます。
オリジナルコンテンツ:
私はこれを数時間行ってきましたが、あまり運がありませんでした。Control.Region、Form.TransparencyKey、Form.Opacity、およびいくつかのファンキーな効果を持つ他のいくつかのランダムなものをいじりました。
最近、デスクトップをカスタマイズしようとしていて、Application Docks をいじることにしました。Mac ドックといくつかのサード パーティの Windows 実装が提供するものを確認した後、自分でビルドすることにしました。
最終的には、Win32 API の使用に移りたいと考えています。今のところ、できるだけ多くの C# および .Net フレームワーク機能を使用して何かを機能させたいだけです。
このアプリケーションでできるようにしたいことがいくつかあります。
- グラデーションの背景を持つフォーム/メニューを表示します。
- アイコンを不透明に保ちながら、フォーム/メニューを透明にします。
- 透明な背景を含むアイコンを表示します。
- メニューとアイコンは、マウス関連のイベント (hover、leave、click、dragover、dragdrop、その他いくつか) を受け取ることができる必要があります。
これは私が撮影している効果です:
http://img207.imageshack.us/img207/5716/desired.jpg
この画像は、私が達成しようとしている視覚効果を示しています。Rainmeterというプログラム用に作ったスキンです。この画像は、スキンの背後にある Notepad++ を示しており、いくつかのスキンのファイルがエディターで開かれています。メニューは透明ですが、アイコンは不透明のままです。
私のアプローチ:
フォームをメニューとして使用することは、私にとって論理的な最初の選択肢のように思えました。イベントの基本的な理解があります。独自のクリック イベントを作成する方法がよくわからないので、フォームを使用すると、イベントの操作が少し簡単になります。アイコンのいくつかのオプションを検討しました。PictureBoxes は画像を保持し、イベントを受け取ることができるため、アイコンには PictureBoxes を使用することにしました。
メニューのすべての構造ロジックのコードを完成させた後、必要な視覚効果を得るためにいろいろと試してみました。Form.Opacity は、フォーム上のすべての透明度に影響を与えました。アイコンを完全に不透明にしたいので、このプロパティはそのままにしました。BackColor を Color.Transparent に設定しようとしましたが、エラーが発生します。いくつかの組み合わせで遊んでみました...
http://img204.imageshack.us/img204/757/effectsi.jpg
Drawing2D.LinearGradientBrush でグラデーションをビットマップに描画しました。このビットマップは、Form.BackgroundImage または PictureBox.Image として配置されました。使用する場合、PictureBox はフォーム全体をカバーするサイズに設定され、背面に送信されます。
Form.BackgroundColor の一部がアイコンのアウトラインと混ざっていることに気付きました。アイコンは、より滑らかな外観のためにエッジに沿って透明になっています。アイコンはフォームの BackgroundColor を取得しているため、アイコンがフォームに読み込まれると、PictureBoxes が新しい画像を作成していると思います。画像の半透明部分は、フォームの背後にある色とマージする必要があるときに、フォームの BackgroundColor とマージされます。
http://img838.imageshack.us/img838/8299/whitedesktop.jpg
この画像では、フォームのフクシア色が完全に透明になりましたが、アイコンにフクシアが存在することがわかります。すべてのケースで、アルファ値が 150 の同じ緑から黄色へのグラデーションが使用されていることを指摘するのを忘れていました。グラデーションが緑に見えない画像では、透明な色がフクシアの背景と混ざり合っているためです.
ここからどうすればいいのかよくわかりません。どうにかしてフォームだけを完全に透明にすることができれば、望むものが得られそうな気がします。また、PictureBox を使用する代わりに、アイコンを描画するだけで運が良くなるかもしれないと考えていました。問題は、マウス イベントを受信するようにアイコンを設定することです。(私は自分でイベントを作成したことはありません。Win32 API 呼び出しが必要になると思います。)
必要な効果を得るために、PictureBoxes で他にできることはありますか? いずれにせよ、達成しようとしている全体的な効果についてのアイデアや提案を受け入れます。