Windows Theme API 2-コントロールのテキストを不透明にする-

やっと出来ました。長かった。。。
左の「button1」が正しく描画されている状態です。

手順

  • 1.ボタンのサブクラス化
    • SetWindowLongPtr
  • 2.ボタンの描画の前に、ペイントバッファを用意
    • BeginBufferedPaint
  • 3.メモリデバイスコンテキストに描画(デフォルトのプロシージャを呼び出す)
    • CallWindowProc(ボタンのデフォルトプロシージャ, ... );
  • 4.不透明度を255にセットして更新
    • BufferedPaintSetAlpha
    • EndBufferedPaint

プログラム

/*ボタンの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を送って変更してください。