Windows Theme API 2-コントロールのテキストを不透明にする-
やっと出来ました。長かった。。。
左の「button1」が正しく描画されている状態です。
手順
- 1.ボタンのサブクラス化
- SetWindowLongPtr
- 2.ボタンの描画の前に、ペイントバッファを用意
- BeginBufferedPaint
- 3.メモリデバイスコンテキストに描画(デフォルトのプロシージャを呼び出す)
- CallWindowProc(ボタンのデフォルトプロシージャ, ... );
- 4.不透明度を255にセットして更新
- BufferedPaintSetAlpha
- EndBufferedPaint
プログラム
- サブクラス化はgoogle先生にお任せします。
/*ボタンのWM_PAINT*/ BP_PAINTPARAMS m_PaintParams = { sizeof(BP_PAINTPARAMS) }; HDC mem_dc = 0; HPAINTBUFFER paint_buffer = ::BeginBufferedPaint( hdc, &ps.rcPaint, BPBF_TOPDOWNDIB, &m_PaintParams, &mem_dc ); if( paint_buffer != 0 ) { ::CallWindowProc( ボタンのデフォルトプロシージャ, hwnd, WM_PRINTCLIENT, ( WPARAM )mem_dc, PRF_CLIENT ) ); ::BufferedPaintSetAlpha( paint_buffer, &ps.rcPaint, 255 ); //不透明 ::EndBufferedPaint( paint_buffer, TRUE ); }
上記のプログラムではフォントの設定を行っていません。
SendMessageでWM_SETFONTを送って変更してください。