閉じる

ボタンコントロールのカスタムドロー

昔からあるオーナードローとは違って背景消去前後、描画前後等より細かく制御できるやりかた。*1
細かい点は省いて、問題になった点を。


今回、普通のウィンドウ上に CreateWindow(WC_BUTTON,…BS_AUTORADIOBUTTON…)としてお任せラジオボタンを作成した。
普通に考えると、NMCUSTOMDRAW->uItemStateにCDIS_CHECKEDビットが立っている時にラジオボタンがチェックされている描画を行うと思うのだけど…ボタンを押すと CDIS_CHECKEDが立って描画要請が来るのだけど、放した時点で CDIS_CHECKEDが落ちた描画要請が来てしまう。
他に見るべきビットがあるのかとも思ったけど、状況によって CDIS_HOTと CDIS_FOCUSが立ったり落ちたりするぐらい。
悩んだ末に、BM_GETCHECKを送ってチェック状態を把握するようにしてしまった。
何かもっとスマートな解法がある気がするんだけど…


*1 ツリービューやリストビューに関しては何もしなくても出来るけど、ボタンコントロールに関しては ComCtrl32のバージョン6を使うように manifestを指定する必要がある。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)