オーナードローについてのメモ。
オーナードローの方法
コントロールを作る時(CreateWindowとかダイアログエディタでコントロールを配置するとき)にウィンドウスタイルにコントロール毎に決められているオーナードローのフラグをセットする。ボタンの場合だとBS_OWNERDRAW。この値はコントロールによって異なるので注意する。セットすると親ウィンドウにWM_DRAWITEMメッセージが飛ぶのでそこで自前描画する。
WM_DRAWITEMメッセージ
WPARAMに描画対象のコントロールID、LPARAMにDRAWITEMSTRUCTのポインタが入る。親ウィンドウはコントロールIDでどのコントロールが描画対象かを識別し、DRAWITEMSTRUCTの情報を元に描画する。通常はDRAWITEMSTRUCTのhDCメンバを使ってGDIで描画する。私は今回ここをDirect2Dで描画することにする。
気になっているところ
WM_DRAWITEMメッセージはコントロール毎に呼ばれる。なので都度RenderTarget::BeginDraw/EndDrawして描画する必要があるがこれはかなり冗長でオーバヘッドも大きそうな気がする。描画情報をリストに格納して一気に描画する方が良いかもしれないが面倒だ。とりあえず1個ずつ描画でやってみるかな。