1. 程式人生 > >如何動/靜 態 兩種方式修改Static控制元件的顏色

如何動/靜 態 兩種方式修改Static控制元件的顏色

轉自https://www.cnblogs.com/52yixin/articles/2271278.html

首先,我覺得VC很坑爹!在C#等那些中,要修改比如一個Label或者一個按鈕的顏色...那簡直就是小學生都會做的事情...可是到VC++裡面,你說你想修改Label的顏色。。甚至你說你要修改按鈕的。。。痛苦啊~!!!有木有!!!

 

可是沒辦法,還是得搞,繼續吧。。。

 

方法一:靜態修改

 

這種方式比較簡單,就是在需要修改的那個類中,過載WM_CTLCOLOR函式即可,程式碼如下:

HBRUSH CctlfinalDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO:  Change any attributes of the DC here
    if(pWnd-> GetDlgCtrlID()==IDC_STATIC) 
    { 
        pDC-> SetBkMode(TRANSPARENT);   //你可以修改背景模式
        //pDC-> SetBkColor(m_bkcolor); //你可以修改背景顏色
        //hbr=CreateSolidBrush(m_bkcolor);  //你可以修改畫刷
        pDC->SetTextColor(RGB(255,0,0));  //你當然可以修改字型顏色
    } 

    // TODO:  Return a different brush if the default is not desired
    return hbr;
}

好了,於是乎,你執行你的程式,就可以看到你的Static控制元件變成紅色了!

 

方法二:動態修改

 

當然有的人非常想點選一個按鈕什麼的,達到將剛才的紅色Static變化為綠色..這個動態也很煩人的,這個時候需要我們在按鈕相應函式中,寫如下程式碼(當然首先你自己去定義一個COLORREF的變數m_bkcolor咯)

void CctlfinalDlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    m_bkcolor=RGB(0,255,0);   //Green
    GetDlgItem(IDC_STATIC)-> InvalidateRect(NULL); 
}

主要這個函式 : InvalidateRect....解釋在此,我就不多說了 http://baike.baidu.com/view/1226797.html?fromTaglist

 

然後再我們過載的OnCtlColor函式中,作如下修改即可:

HBRUSH CctlfinalDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO:  Change any attributes of the DC here
    if(pWnd-> GetDlgCtrlID()==IDC_STATIC) 
    { 
        pDC->SetTextColor(m_bkcolor);
    } 

    // TODO:  Return a different brush if the default is not desired
    return hbr;
}

然後你執行並點選按鈕,就能看到你的Static變為了綠色的字型。