0

私は、LISTBOX特別な機能を追加するために、Windows コモン コントロールのスーパー クラス バージョンを作成中です。

標準コントロールはWM_CTLCOLORLISTBOXメッセージをその親に送信し、テキストと背景色の両方を実行時に適切なメッセージ ハンドラー内で指定できるようにします。ただしWM_CTLCOLORLISTBOX、コントロール自体には送信されないため、カプセル化して内部で処理することはできません。

私が対処しようとしているシナリオは、コントロールの有効/無効状態に応じて背景とテキストの色を変更することです。状態に関係なく、リストボックスの背景を同じ色合いのままにするという標準的な動作は、私には見苦しく、一貫性がないように見えます。カプセル化内でこれらの値を設定し、他のすべての描画タスクを基本クラスのウィンドウ プロシージャに渡す別の方法はありますか?

を使うのが気になりSetClassLongPtr()ました。ただし、これはテキストの色に対処しないだけでなく、正しく理解すれば、現在存在するそのクラスのすべてのコントロールの背景を変更し、状態が変更された特定のコントロールは変更しません。

4

1 に答える 1

0

WM_CTLCOLORLISTBOXウィンドウに送信されるため、メッセージを受信するにはウィンドウをサブクラス化する必要があります。それを回避する方法はありません。ただし、VCL などの一部のラッパー UI フレームワークは、そのときに生成されたコントロールにそのようなメッセージを転送するように設計されているため、コントロールは独自のメッセージを処理できます。ただし、ラッパー フレームワークを使用しておらず、Win32 を直接使用している場合は、親メッセージを自分で処理する必要があります。特定の HWND のサブクラス化の詳細については、MSDN を参照してください。

コントロールのサブクラス化

于 2014-12-05T19:37:31.940 に答える