MFC 修改各種控件的背景顏色、字顏色和字體_第1頁
MFC 修改各種控件的背景顏色、字顏色和字體_第2頁
MFC 修改各種控件的背景顏色、字顏色和字體_第3頁
MFC 修改各種控件的背景顏色、字顏色和字體_第4頁
MFC 修改各種控件的背景顏色、字顏色和字體_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、MFC 修改各種控件的背景顏色、字顏色和字體今天主要總結(jié)一下有關(guān)MFC 中靜態(tài)編輯框(StaticEdit)、編輯框(Edit)和按鈕(Button)的背景顏色、字顏色和字體。我的程序運(yùn)行結(jié)果如下:由上圖我們知道修改的地方有:1、把StaticEdit的背景顏色變成黃色,字體顏色變成藍(lán)色;2、Edit的背景顏色變成黃色,字體變成紅色,字體為華文楷體3、Button的背景顏色為綠色,字體為紅色。1、對StaticEdit控件修改在0106ChangeColorDlg.h中添加一個變量CBrush m_brush,用來保存控件的背景顏色;對0106ChangeColorDlg添加一個響應(yīng)WM_CT

2、LCOLOR消息,在OnCtlColor函數(shù)中添加如下代碼:else if(pWnd->GetDlgCtrlID()=IDC_STA)/如果是靜態(tài)編輯框 pDC->SetTextColor(RGB(0,0,255);/修改字體的顏色 pDC->SetBkMode(TRANSPARENT);/把字體的背景變成透明的 return m_brush;/返回背景色 2、對Edit控件修改在OnCtlColor函數(shù)中添加如下代碼:if(pWnd->GetDlgCtrlID()=IDC_EDIT1)/如果是編輯框 pDC->SetTextColor(RGB(255,0,0);

3、/設(shè)置編輯框字體的顏色 pDC->SetBkColor(RGB(255,255,0);/設(shè)置字體背景顏色 CFont font; font.CreatePointFont(100,"華文楷體"); pDC->SelectObject(&font);/設(shè)置字體 return m_brush; 3、對Button控件修改對Button按鈕修改需要通過重寫DrawItem方法,所以寫一個類CSXBtn,繼承于CButton類。CSXBtn類實(shí)現(xiàn)了鼠標(biāo)在button和不在button按鈕時變換背景色功能。具體代碼如下:void CSXBtn:DrawItem(L

4、PDRAWITEMSTRUCT lpDrawItemStruct) static int i=0; UINT uStyle = BS_DEFPUSHBUTTON; / This code only works with buttons. ASSERT(lpDrawItemStruct->CtlType = ODT_BUTTON); / If drawing selected, add the pushed style to DrawFrameControl. if (lpDrawItemStruct->itemState & ODS_SELECTED) uStyle |=

5、DFCS_PUSHED; / Draw the button frame. :DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem, DFC_BUTTON, uStyle); CDC* pDC = CDC:FromHandle(lpDrawItemStruct->hDC); / Get the button's text. CString strText; GetWindowText(strText); / Draw the button text using the text co

6、lor red. CBrush B; CRect focusRect; focusRect.CopyRect(&lpDrawItemStruct->rcItem); DrawFocusRect(lpDrawItemStruct->hDC, (LPRECT)&focusRect); pDC->Draw3dRect(focusRect, :GetSysColor(COLOR_BTNHILIGHT), :GetSysColor(COLOR_BTNSHADOW); if(m_flag)/判斷鼠標(biāo)是否在button按鈕上 B.CreateSolidBrush(RGB(0

7、,255,0); else B.CreateSolidBrush(RGB(0,0,255); :FillRect(lpDrawItemStruct->hDC,&focusRect, (HBRUSH)B.m_hObject); :SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT); COLORREF crOldColor = :SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0); :DrawText(lpDrawItemStruct->hDC, strText, strText.G

8、etLength(), &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER); :SetTextColor(lpDrawItemStruct->hDC, crOldColor);void CSXBtn:OnMouseMove(UINT nFlags, CPoint point) / TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值 m_flag=true; TRACKMOUSEEVENT tme; tme.cbSize=sizeof(tme); tme.dwFlags=TME_LEAVE; tme.

9、hwndTrack=this->m_hWnd; :_TrackMouseEvent(&tme); CButton:OnMouseMove(nFlags, point); Invalidate();void CSXBtn:OnMouseLeave() / TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值 m_flag=false; CButton:OnMouseLeave(); Invalidate(); UpdateWindow();動態(tài)設(shè)置Edit控件的背景及字體顏色(2009-12-13 10:57:03) 轉(zhuǎn)載標(biāo)簽: vcedit背景顏色字體顏色分類: 程序設(shè)計(jì) 1.新

10、建一個基于對話框的應(yīng)用程序,在對話框上添加一個Edit控件和三個Radio控件2.修改Radio控件的ID分別為:IDC_RAD_RED、IDC_RAD_GREED、IDC_RAD_BLUE,名稱對應(yīng)修改為red、green、blue3.向?qū)υ捒驅(qū)?yīng)的類中添加如下成員變量:public: COLORREF m_colorEditText; / edit控件的字體顏色 COLORREF m_colorEditBK;  / edit控件的背景顏色 CBrush* m_pEditBkBrush;并在構(gòu)造函數(shù)中初始化:CColorEditDl

11、gDlg:CColorEditDlgDlg(CWnd* pParent ) : CDialog(CColorEditDlgDlg:IDD, pParent) /AFX_DATA_INIT(CColorEditDlgDlg) /AFX_DATA_INIT / Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);  m_colorEditTex

12、t = RGB(255,255,255); m_colorEditBK = RGB(0,0,0); m_pEditBkBrush = new CBrush(RGB(0,0,0);4.向?qū)υ捒蛱砑覹M_CTLCOLOR和WM_DESTORY消息的響應(yīng)函數(shù)如下:HBRUSH CColorEditDlgDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) switch (nCtlColor)    case CTLCOLOR_EDIT: case CTLCOLOR_MSGBOX:

13、  / Set color to green on black and return the background brush.  pDC->SetTextColor(m_colorEditText);  pDC->SetBkColor(m_colorEditBK);  return (HBRUSH)(m_pEditBkBrush->GetSafeHandle();   default:  return CDialog:OnCtlColor(pDC

14、, pWnd, nCtlColor);  void CColorEditDlgDlg:OnDestroy() CDialog:OnDestroy();  / TODO: Add your message handler code here delete m_pEditBkBrush; 5.分別向三個Radio控件添加BN_CLICKED消息響應(yīng)函數(shù)如下:void CColorEditDlgDlg:OnRadRed() / TODO: Add your control notification handler cod

15、e here m_colorEditText = RGB(255,0,0); / redraw edit control (CEdit *)GetDlgItem(IDC_EDIT1)->SetRedraw(TRUE); / invalidate the entire control, force painting (CEdit *)GetDlgItem(IDC_EDIT1)->Invalidate(); (CEdit *)GetDlgItem(IDC_EDIT1)->UpdateWindow(); void

16、 CColorEditDlgDlg:OnRadBlue() / TODO: Add your control notification handler code here m_colorEditText = RGB(0,0,255); / redraw edit control (CEdit *)GetDlgItem(IDC_EDIT1)->SetRedraw(TRUE);  / invalidate the entire control, force painting (CEdit *)GetDlgItem(IDC_

17、EDIT1)->Invalidate(); (CEdit *)GetDlgItem(IDC_EDIT1)->UpdateWindow();void CColorEditDlgDlg:OnRadGreen() / TODO: Add your control notification handler code here m_colorEditText = RGB(0,255,0); / redraw edit control (CEdit *)GetDlgItem(IDC_EDIT1)->SetRedraw(TRUE);

18、0; / invalidate the entire control, force painting (CEdit *)GetDlgItem(IDC_EDIT1)->Invalidate(); (CEdit *)GetDlgItem(IDC_EDIT1)->UpdateWindow();完成后運(yùn)行程序,點(diǎn)擊Radio控件可以動態(tài)改變編輯框中字體的顏色,如果想改變edit框背景的顏色,可以修改成員變量m_colorEditBK的值并重繪控件。MFC EDIT控件中改變背景色和文字顏色這兩天需要給MFC中的EDIT框改變一下背景顏色,而且由于框比較多,且每

19、次需要變色的框也是隨機(jī)的,但是個數(shù)是確定的。在網(wǎng)上搜了好多,下面這個是介紹的比較清楚,而且可以用的一種方法。由于本人用的vs2008,在對話框上右擊沒有添加事件處理函數(shù)一項(xiàng),且對MFC也不是特別熟悉,所以開始只是在對話框類中重載了onctlcolor()函數(shù),但添加時一直沒有效果,最后發(fā)現(xiàn)出了只定義該函數(shù)外還需要在MAP中添加該函數(shù)的映射關(guān)系才能正常使用。另外要一次改變多個框的背景的話,需要開辟空間,先把這些框的ID存上,然后在onctlcolor()函數(shù)中一一比對。MFC里畫圖了,顏色了的真抽象,沒點(diǎn)基礎(chǔ)好難理解啊,轉(zhuǎn)自:這里介紹的改變文本編輯框的背景顏色的方法,不需要對CEdit生成新的類

20、,步驟如下:(1) 新建一個基于對話框的MFC應(yīng)用程序,程序名稱為Test(2) 在對話框上添加兩個文本框,ID分別為IDC_EDIT1和IDC_EDIT2(3) 在CTestDlg的頭文件中添加幾個成員變量,如下所示:viewplainprint?1. class CTestDlg : public CDialog  2.   3. protected:  4. CBrush m_redbrush,m_bluebrush;  5. COLORREF m_

21、redcolor,m_bluecolor,m_textcolor;  6. ;  (4) 在CTestDlg.cpp文件的BOOL CTestDlg:OnInitDialog()中添加以下代碼:viewplainprint?1. BOOL CTestDlg:OnInitDialog()  2.   3. CDialog:OnInitDialog();  4.   5. / Set the icon for this&

22、#160;dialog. The framework does this automatically  6. / when the application's main window is not a dialog  7. SetIcon(m_hIcon, TRUE);    / Set big icon  8

23、. SetIcon(m_hIcon, FALSE);   / Set small icon  9.   10. m_redcolor=RGB(255,0,0);                      / 紅色  11. m_blueco

24、lor=RGB(0,0,255);                     / 藍(lán)色  12. m_textcolor=RGB(255,255,255);                 /

25、 文本顏色設(shè)置為白色  13. m_redbrush.CreateSolidBrush(m_redcolor);      / 紅色背景色  14. m_bluebrush.CreateSolidBrush(m_bluecolor);    / 藍(lán)色背景色  15. return TRUE; / return TRUE unless you set

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論