You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.1 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "stdafx.h"
#include "MyBttom.h"
#include "GlobalDefine.h"
IMPLEMENT_DYNAMIC(CMyBottom, CMFCButton)
CMyBottom::CMyBottom()
{
m_font.CreatePointFont(120,"宋体",NULL);
m_TextColor = RGB_BLACK;
m_DownColor = RGB_GRAY1;
m_UpColor = RGB_GRAY2;//默认颜色
}
CMyBottom::~CMyBottom()
{
}
BEGIN_MESSAGE_MAP(CMyBottom, CMFCButton)
END_MESSAGE_MAP()
// m_MyImgBtn 消息处理程序
//设置btn 的显示方式Tooltip 是鼠标放在按钮上的提示内容
void CMyBottom::SetButtonStyle(CString Tooltip)
{
EnableFullTextTooltip(true);
// Use the application menu font at the button text font.
EnableMenuFont();
// Use the current Windows theme to draw the button borders.
EnableWindowsTheming(false);
// Set the button to auto-repeat mode.
SetAutorepeatMode();
// Set the background color for the button text.
//m_CtrlDoorBtn.SetFaceColor(RGB(255,0,0),true);
SetFontStyle();
// Set the tooltip of the button.
SetTooltip(Tooltip);
SizeToContent();
}
void CMyBottom::SetFontStyle()
{
SetFont(&m_font);
}
void CMyBottom::Refreash()
{
//SetFontStyle();
}
void CMyBottom::SetDownColor(COLORREF color)
{//CMyButton类的函数
m_DownColor = color;
}
void CMyBottom::SetUpColor(COLORREF color)
{
if(color != m_UpColor)//颜色变化的时候刷新显示
{
m_UpColor = color;
SetFontStyle();
}
}
void CMyBottom::SetTextColor(COLORREF color)
{
m_TextColor = color;
}
void CMyBottom::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);//得到绘制的设备环境CDC
VERIFY(lpDrawItemStruct->CtlType==ODT_BUTTON);
//得当Button上文字,这里的步骤是:1,先得到在资源里编辑的按钮的文字,
//然后将此文字重新绘制到按钮上,
//同时将此文字的背景色设为透明,这样,按钮上仅会显示文字
const int bufSize = 512;
TCHAR buffer[bufSize];
GetWindowText(buffer, bufSize);
int size=strlen(buffer);//得到长度
DrawText(lpDrawItemStruct->hDC,buffer,size,&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);//利用画刷brush填充矩形框
//因为这里进行了重绘,所以文字也要重绘
DrawText(lpDrawItemStruct->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);//
dc.SetTextColor(m_TextColor);
DrawText(lpDrawItemStruct->hDC,buffer,size,&lpDrawItemStruct->rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);
SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);
}
//绘制边框
{
COLORREF fc=RGB(255-GetRValue(m_UpColor),255-GetGValue(m_UpColor),255-GetBValue(m_UpColor));
CBrush brush(fc);
dc.FrameRect(&(lpDrawItemStruct->rcItem),&brush);//用画刷brush填充矩形边框
}
}