いつもお世話になっております。
OnCtlColorの中でエディットの色を変更しているます。
スライダーを動かすことによってRGBの値を変更して背景色が変更される
プログラムです。
最初はうまくいくのですが、ある一定以上の処理を実行するとデバックのアウトプットで
Warning: hDC is NULL in CWnd::GrayCtlColor; WM_CTLCOLOR not processed.
と表示され背景が灰色に戻り変更されなくなります。
何が悪いと言われているかも良く分からないのですが、分かる方がいらっしゃいましたら
教えてください。
----------------ソースコード---------------------
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
int ID = pWnd->GetDlgCtrlID();
switch(ID){
case IDC_BL1: // スタティックテキストのID
if (m_Br1 != "){ // 色が指定されていれば
// 指定された色で背景色を塗る
pDC->SetBkColor(RGB(col[0][0],col[0][1],col[0][2]));
return CreateSolidBrush(RGB(col[0][0],col[0][1],col[0][2]));
} else return hbr; // 色が指定されていない時は変化なし
case IDC_BL2:
if (m_Br2 != "){
pDC->SetBkColor(RGB(col[1][0],col[1][1],col[1][2]));
return CreateSolidBrush(RGB(col[1][0],col[1][1],col[1][2]));
} else return hbr;
default:
break;
}
return hbr;
----------------ソースコード---------------------
colの配列にはちゃんと0~255までの値が入っています。
省略してありますがスタティックテキストは30個近くあります。
生成したブラシをそのまま返しているので,ブラシは破棄されずにリークし,
結果としてGDIリソースを使い切ってしまうのでしょう。
ブラシをクラスのメンバに持たせて,ちゃんと破棄できるようにする必要があります。
YuO さま返信ありがとうございます。
できました。Createしたんだから破棄しないといけなかったんですね。
ありがとうございました。