OnCtlColor()で実行できることはわかっていますが、フォームが読み込まれ、静的テキストが描画されると色が変わります。フォームが読み込まれた後に色が変わります。タイマーを使用して、解決策を探しました。しかし、私は明確なものを見つけられませんでした、これは私が書いたものです:
void CTabFive::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
CWnd* pWnd = this->GetDlgItem(IDC_Chromosome1);
CDC* dc = pWnd->GetDC();
dc->SetBkColor(RGB(200,0,0));
pWnd->Invalidate();
pWnd->UpdateWindow();
Invalidate();
UpdateWindow();
//flag = true;
}
タイマーは必要ありません。ここでは、クラスのbool m_colouredメンバーがfalseに初期化され、ボタンを押すと切り替えられます。 OnCtlColorは、m_colouredの値に応じて、赤またはシステムカラーで描画されます。うまく機能します。
HBRUSH Cmfcvs2010Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_STATIC && pWnd->GetDlgCtrlID() == IDC_LABEL)
{
DWORD d = GetSysColor(COLOR_BTNFACE);
COLORREF normal = RGB(GetRValue(d), GetGValue(d), GetBValue(d));
COLORREF red = RGB(255, 0, 0);
pDC->SetBkColor(m_coloured ? red : normal);
}
return hbr;
}
void Cmfcvs2010Dlg::OnBnClickedButton1()
{
m_coloured = !m_coloured;
Invalidate();
}