MFC Button控件的背景颜色_第1页
MFC Button控件的背景颜色_第2页
MFC Button控件的背景颜色_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MFC Button 控件的背景颜色一个继承于 CButton 的按钮控件类,实现 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:/必需重载的函数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的全部成员函数,但在创建时需要使用BS_OWNERDRAW风格。如果按钮不是动态生成,使用Attach函数使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);得到绘制的设备环境 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)/控制的选中状态结束,去掉边框CBrush brush(m_UpColor);dc.FrameRect(&lpDrawItemStruct-rcItem,&brush);/dc.Detach();/调用 CMyButton 类的方式:在对话框类头文件中#include

10、 CMyButton.h,再在对话框类中找到函数OnlnitDialog()如果 找不到可以在对话框事件属性中重载出来,其中m_cbBtn变量的声明为:CMyButton m_cbBtn;这句可以放在类的其他地方,只要合法就行/将按钮修改为 BS_OWNERDRAW 风格,其他风格无效 GetDlgItem(IDC_BUTTON1)-ModifyStyle(0,BS_OWNERDRAW,0);/绑定控件IDC_BUTTON1与类CMyButton,响应重载函数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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论