WM_PAINT を処理してグラフを表示する CScrollView から継承されたウィンドウがあります。このグラフにはさまざまなタイプの要素があり、要素のタイプは要素の形状によって示されます。
ユーザーが各形状の意味を理解できるように、凡例を表示したいと思います。ユーザーはこの凡例を頻繁に見ることはないため、ビュー コントロールの右上隅に小さなアイコンが表示されるようにします。ユーザーがこのアイコンの上にマウスを移動すると、グラフで使用される形状の凡例を表示する小さな四角形に展開されます。マウスをこの四角形の外に移動すると、小さなアイコンに戻ります。
これは私がこれまでに試したことです:
- ビュー クラスの WM_PAINT のハンドラで GDI を使用して、ホットスポット アイコンと凡例の四角形を描画します。
- スクロール ビューの子として作成される別のウィンドウとしてホットスポットを実装します。
- ホットスポットを別のウィンドウとして実装しますが、親のないポップアップ ウィンドウとして作成します。
ユーザーがグラフ ビューをスクロールすると、バージョン 1 と 2 の動作がおかしくなる。
バージョン1では、スクロール中にアーティファクト(ボタンがビュー全体に塗りつぶされている)を見ることができます。スクロール中に既存の画像は無効にならず、移動しただけだと思います。
バージョン 2 ではにじみはありませんが、VM_HSCROLL および WM_VSCROLL メッセージを受け取るたびに子ウィンドウを移動する必要があり、これらのメッセージはこの方法で使用するには正確ではありません。スクロール中に、ボタンが数ピクセル移動してから正しい位置にジャンプするのを見ることができます。
バージョン 3 が最も厄介で、凡例がグラフ ビューの子ではないため、グラフ ビューが表示されていない場合でも凡例ボタンが表示されるという奇妙な動作が発生し、実行可能な開発パスであるには問題が多すぎると思いますに時間を投資します。
バージョン 2 が最も有望だと思いますが、スクロール中に子ウィンドウを 1 つの場所にとどめる方法を見つける必要があります。
このような実装に成功した人はいますか? 私が調査できる他の実装はありますか?