如何動/靜 態 兩種方式修改Static控制元件的顏色
阿新 • • 發佈:2018-11-19
轉自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變為了綠色的字型。