版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)學(xué)概念課程設(shè)計(jì)
- 2024合同約定與崗位調(diào)動管理資料
- 2019魯教版高中地理必修第一冊《第三單元 從圈層作用看地貌與土壤》大單元整體教學(xué)設(shè)計(jì)2020課標(biāo)
- 建筑行業(yè)法律法規(guī)及合同管理作業(yè)指導(dǎo)書
- 2024重慶市計(jì)算機(jī)信息系統(tǒng)集成合同
- 2024品牌合作合同如何擬定
- 上肢康復(fù)拉伸課程設(shè)計(jì)
- 環(huán)境衛(wèi)生工程合同書
- vhdl課程設(shè)計(jì)小游戲
- 人工智能建模課程設(shè)計(jì)
- 《當(dāng)幸福來敲門》電影鑒賞PPT作業(yè)PPT課件
- 施工現(xiàn)場質(zhì)量安全生產(chǎn)管理體系報審表表
- 國家學(xué)生體質(zhì)健康標(biāo)準(zhǔn)(初中)
- 《說文解字》文員五百四十部首小篆版-540部首歌訣帶拼音(共6頁)
- 等分圓系數(shù)表
- 兩點(diǎn)間的距離及點(diǎn)到直線間的距離--教案
- 最全的L13J1建筑工程做法(共170頁)
- 空分冷箱安裝監(jiān)理實(shí)施細(xì)則
- 最后一頭戰(zhàn)象_PPT課件
- 列管式換熱器泄漏原因分析及預(yù)防措施
- 發(fā)電機(jī)保護(hù)試驗(yàn)
評論
0/150
提交評論