私のアプリケーションはC#3.5、Winformsですが、これはおそらくP/Invokeを必要とするため、.NETと厳密には結びついていません。オーナーが描いたメニュー項目にアニメーションを提供する方法は?
私は、ContextMenu
とMenuItem
クラスでオーナー描画メニューアイテムを作成しました。すべてうまくいきますが、一部の項目では小さなアニメーションを作成したいと思います(項目に関連付けられたプロセスが実行中であることを示しています)。残念ながら、上記の2つのクラスは、Invalidate()
メソッドなどを提供していません。
これまでのところ、最初のOnDrawでWindowFromDC()
をP/Invokeし、結果のハンドルを保存してから、メニューが閉じられるまでハンドルで定期的にInvalidateRect()
を呼び出してください。
これはちょっとハッキリですが、まだ試していないし、よりエレガントな方法があるのだろうかと思っています。
はい、完全所有者であることに問題があります。少なくとも、人々がネット上で何を言っていたか、そして私はそれをすべてペイントすることができませんでした。私の場合、私はいくつかのかなり太いカスタマイズをしています - 異なるフォントで2行のテキスト。大きな好ましいアニメーションアイコン。多分何か。メニュー項目はすべて同じ高さではありません(一部には1行のテキストしかありません)。 –
@Vilx:うーん、面白いです。正直言って、私は本当にオーナーを描く人はあまりありません。私はアイコンを得るために標準メニューのオーナーの描画をたくさん行ってきましたが、 'MenuStrip'とその仲間をツールボックスから完全に削除しました。私がオンラインで読んだことは、APIメニューよりも優れたカスタマイズ性/オーナードローサポートを提供しているようです。彼らの主なメリットは、適切に設計され、実際にオブジェクト指向であることです。つまり、 'ToolStripItem'をサブクラス化し、必要に応じて独自の描画を行うことができます。より限定された 'ToolStripMenuItem'をサブクラス化しようとしました。 –
ああ、そうかもしれない。私は 'ToolStripMenuItem'をサブクラス化しようとしました。しかし、 'ContextMenuStrip'は' ToolStripMenuItem'以外の項目を含んでいますか? –