Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to change background color of a static text control (when a button is pushed or in a timer) in mfc?

Tags:

visual-c++

mfc

I know it can be done with OnCtlColor(), but it changes colors when the form is being loaded and the static texts are to be drawn, I want to do it after form is loaded, with a timer maybe, I searched for a solution but I didn't find a clear one, this is what I wrote:

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;
}
like image 370
Saman Hakimzadeh Abyaneh Avatar asked Aug 17 '12 12:08

Saman Hakimzadeh Abyaneh


1 Answers

No timer is needed. Here I have a bool m_coloured member of the class initialized to false, and toggled in the button press. The OnCtlColor will draw in red or in the system colour depending on the value of m_coloured. Works nicely.

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();
}
like image 62
acraig5075 Avatar answered Oct 04 '22 03:10

acraig5075