※ ChatGPTを利用し、要約された質問です(原文:ボタンのオーナードローについて)
ボタンのオーナードローについて
このQ&Aのポイント
既存のプログラムにあるボタンをオーナードローに変更しようとしています。
MainFrame-CDialogBar((1))-CWnd((2))のような重なりになっています。開発環境は、VC++6.0です。
変更後のOnDrawItem()にイベントが飛んでこない場合、どこを調べれば良いか教えてください。
既存のプログラムにあるボタンをオーナードローに変更しようとしています。
概要としては、以下のとおりです。
・MainFrame-CDialogBar((1))-CWnd((2))のような重なりになっています。
・上記(2)のクラスにてオーナードローできるようにしたいのです。
・開発環境は、VC++6.0です。
変更点は以下のとおりです。
・(2)にメッセージマップの追加(ON_WM_DRAWITEM())
・(2)にメッセージハンドラの追加(OnDrawItem())
・(1)メソッド内で、(2)をCreate後、(2)にModifyStyle()にて、BS_OWNERDRAWを付加
ところが、変更後のOnDrawItem()にイベントが飛んできません。
自分で調べたことは、以下のとおりです。
・SPY++でメッセージの確認(→飛んできていません)
・GetWindowLong()にて、ボタンスタイルの確認(→追加スタイルが付加されてました)
このような場合、他にどこを調べて良いか教えて頂きたいのです。
拙い文章ですが、何卒、よろしくお願い致します。
お礼
ご回答ありがとうございました。 その後、色々調べていくと、(2)のCWnd派生クラスの中のCreate()メソッドからコールされているのが、CretaeControlメソッドであることに気づきました。 OleControlを作成していることが問題のようで、通常のCWnd、CButton等のクラスをCreateすると、問題なくWM_DRAWITEMメッセージが飛んできました。 # 他人が作ったソースで読みきれておらず、ご迷惑をおかけしました。 よって、原因としては、「OleControlではオーナードローできない」ことだろうと推測しております。 実施したいことについては、別手段を検討いたします。 redfox63様> 丁寧なご対応に誠に感謝しております。この度は、色々とありがとうございました。