OnCtlColorでの背景色変更について – プログラミング – Home

OnCtlColorでの背景色変更につ...
 
通知
すべてクリア

[解決済] OnCtlColorでの背景色変更について


あお
 あお
(@あお)
ゲスト
結合: 22年前
投稿: 45
Topic starter  

いつもお世話になっております。

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個近くあります。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

生成したブラシをそのまま返しているので,ブラシは破棄されずにリークし,
結果としてGDIリソースを使い切ってしまうのでしょう。

ブラシをクラスのメンバに持たせて,ちゃんと破棄できるようにする必要があります。


返信引用
あお
 あお
(@あお)
ゲスト
結合: 22年前
投稿: 45
Topic starter  

YuO さま返信ありがとうございます。

できました。Createしたんだから破棄しないといけなかったんですね。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました