MFC Button控件的背景顏色_第1頁
MFC Button控件的背景顏色_第2頁
MFC Button控件的背景顏色_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、MFC Button 控件的背景顏色一個繼承于 CButton 的按鈕控件類,實現(xiàn) Button 背景色與文字的共存與改變,可以自行設 計背景色。頭文件:CMyButton.h如下:#pragma once#include afxwin.hclass CMyButton : public CButton/DECLARE_DYNAMIC(CMyButton)public:CMyButton();virtual CMyButton();/設置 Button Down 的背景顏色void SetDownColor(COLORREF color);/設置 Button Up 的背景顏色void Set

2、UpColor(COLORREF color);BOOL Attach(const UINT nID, CWnd* pParent);protected:/必需重載的函數(shù)virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);public:/三種顏色分別為文字,Bu tt on Down的背景顏色,Butt on Up的背景顏色COLORREF m_TextColor, m_DownColor, m_UpColor;源文件: CMyButton.cpp#include StdAfx.h#include CMyButton.hCMyBut

3、ton:CMyButton(void)m_DownColor = m_UpColor = RGB(0,0,0);CMyButton:CMyButton(void)/CMyButton是CButton派生類,具有CButton的全部成員函數(shù),但在創(chuàng)建時需要使用BS_OWNERDRAW風格。如果按鈕不是動態(tài)生成,使用Attach函數(shù)使CMyButton代替原來按鈕的窗口過程。BOOL CMyButton:Attach(const UINT nID, CWnd* pParent)/GetDlgItem(nID)-ModifyStyle(0,BS_OWNERDRAW,0);if (!SubclassD

4、lgItem(nID, pParent)return FALSE;return TRUE;void CMyButton:SetDownColor(COLORREF color)m_DownColor = color;void CMyButton:SetUpColor(COLORREF color)m_UpColor = color;void CMyButton:DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)/ TODO: Add your code to draw the specified itemCDC dc;dc.Attach(lpDrawItem

5、Struct-hDC);得到繪制的設備環(huán)境 CDC VERIFY(lpDrawItemStruct-CtlType=ODT_BUTTON);/得當Button上文字,這里的步驟是:1,先得到在資源里編輯的按鈕的文字,/然后將此文字重新繪制到按鈕上,/同時將此文字的背景色設為透明,這樣,按鈕上僅會顯示文字const int bufSize = 512;TCHAR bufferbufSize;GetWindowText(buffer, bufSize);int size=strlen(buffer); /得到長度DrawText(lpDrawItemStruct-hDC,buffer,size,&

6、lpDrawItemStruct-rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP); /繪制文字SetBkMode(lpDrawItemStruct-hDC,TRANSPARENT); /透明if (lpDrawItemStruct-itemState &ODS_SELECTED) /當按下按鈕時的處理/重繪整個控制CBrush brush(m_DownColor);dc.FillRect(&(lpDrawItemStruct-rcItem),&brush);/因為這里進行了重繪,所以文字也要重繪DrawText(lpDrawItemS

7、truct-hDC,buffer,size,&lpDrawItemStruct-rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);SetBkMode(lpDrawItemStruct-hDC,TRANSPARENT);else /當按鈕不操作或者彈起時CBrush brush(m_UpColor);dc.FillRect(&(lpDrawItemStruct-rcItem),&brush);/同上,進行重繪文字DrawText(lpDrawItemStruct-hDC,buffer,size,&lpDrawItemStruct-rcIt

8、em,DT_CENTER|DT_V CENTER|DT_SINGLELINE|DT_TABSTOP);SetBkMode(lpDrawItemStruct-hDC,TRANSPARENT);if (lpDrawItemStruct-itemState &ODS_SELECTED)&(lpDrawItemStruct-itemAction&(ODA_SELECT| ODA_DRAWENTIRE) /選中了本控件, 高亮邊框COLORREF fc=RGB(255-GetRValue(m_UpColor),255-GetGValue(m_UpColor), 255- GetBValue(m_UpCo

9、lor);/CBrush brush(fc);/ dc.FrameRect(&(lpDrawItemStruct-rcItem),&brush);/if (!(lpDrawItemStruct-itemState & ODS_SELECTED) &(lpDrawItemStruct-itemAction & ODA_SELECT)/控制的選中狀態(tài)結束,去掉邊框CBrush brush(m_UpColor);dc.FrameRect(&lpDrawItemStruct-rcItem,&brush);/dc.Detach();/調用 CMyButton 類的方式:在對話框類頭文件中#include

10、 CMyButton.h,再在對話框類中找到函數(shù)OnlnitDialog()如果 找不到可以在對話框事件屬性中重載出來,其中m_cbBtn變量的聲明為:CMyButton m_cbBtn;這句可以放在類的其他地方,只要合法就行/將按鈕修改為 BS_OWNERDRAW 風格,其他風格無效 GetDlgItem(IDC_BUTTON1)-ModifyStyle(0,BS_OWNERDRAW,0);/綁定控件IDC_BUTTON1與類CMyButton,響應重載函數(shù)Drawltem() m_cbBtn.Attach(IDC_BUTTON1,this);/設置 Button Down 的背景色 m_cbBtn.SetDownColor(RGB(255,0,0);/設置 Button Up 的背景色 m_cbBtn.SetUpColor(RGB(0,0,255);PS:如果連接代碼時在m_cb

溫馨提示

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

評論

0/150

提交評論