ダイアログやコントロールの背景色を変更する。

公開:2011-10-31 12:54
更新:2020-02-15 04:36
カテゴリ:windows,その他api,c++,dawもどきの作成,audio

タブ部分はタブエリアにダイアログを重ねている。一体的に見せるためにダイアログとタブの背景色を一致させたいのだけれどこれがなんか難しい。方法としてはダイアログの背景色を透過させて、タブの背景色を見せようとしているのだけれど、APIでは背景色のプロパティがあってそれを変える関数を呼び出して..なんて物はなくて、意外とややこしい方法で行う必要がある。WM_CTLXXXメッセージを捕まえて背景ブラシを変更する必要があるのだ。初期化時に背景ブラシをセットできればよさそうだけれどそのようなパラメータはCreateDialogXXXAPIには無いようである。


  LRESULT config_dlgproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  {
    switch(message)
    {
    case WM_CTLCOLORDLG:
    case WM_CTLCOLORSTATIC:
    case WM_CTLCOLORBTN:
    case WM_CTLCOLOR:
      SetBkMode((HDC)wParam,TRANSPARENT);
      return  (LRESULT)GetStockObject( NULL_BRUSH );
  .
  .
  .

上記のように各コントロールの背景色を透明にして、NULL_BRUSHを返す。これでうまくいくかなと思ったがなぜかチェックボックスの背景だけが変わらない。

画面の赤い枠で囲まれたチェックボックスの背景色だけが変わらない。凡ミスの可能性大だけどね。チェックボックスのCTLCOLORメッセージってなんなのだろう。WM_CTLCOLORBTNとばかり思ってたんだけど。。