11

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;
}
4

1 に答える 1

9

タイマーは必要ありません。ここでは、false に初期化されたクラスの bool m_coloured メンバーがあり、ボタンを押すと切り替えられます。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();
}
于 2012-08-17T14:04:00.427 に答える