概述
添加类CImgButton,继承自CBitmapButton。选择CImgButton类的property,通过重载DrawItem(不是Message下的WM_DRAWITEM,其响应函数OnDrawItem不会被调用。),实现在bitmap上写入文字的功能。
.h文件代码
#pragma once
#include <afxext.h>
class CImgButton :
public CBitmapButton
{
//DECLARE_DYNAMIC(CImgButton)
public:
CImgButton();
virtual ~CImgButton();
protected:
//DECLARE_MESSAGE_MAP()
public:
public:
COLORREF TextColor;
void SetTextColor(COLORREF crColor);
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
};
.cpp文件代码
#include "stdafx.h"
#include "ImgButton.h"
CImgButton::CImgButton()
{
}
CImgButton::~CImgButton()
{
}
// BEGIN_MESSAGE_MAP(CImgButton, CBitmapButton)
// END_MESSAGE_MAP()
void CImgButton::SetTextColor(COLORREF crColor)
{
TextColor = crColor;
}
void CImgButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CRect rect = lpDrawItemStruct->rcItem;
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
int nSaveDC = pDC->SaveDC();
UINT state = lpDrawItemStruct->itemState;
TCHAR strText[MAX_PATH + 1];
::GetWindowText(m_hWnd, strText, MAX_PATH);
CBitmapButton::DrawItem(lpDrawItemStruct);
pDC->SetTextColor(TextColor);
if (strText != NULL)
{
CFont *hFont = GetFont();
CFont *hOldFont = pDC->SelectObject(hFont);
CSize szExtent = pDC->GetTextExtent(strText, lstrlen(strText));
CPoint pt(rect.CenterPoint().x - szExtent.cx / 2, rect.CenterPoint().y - szExtent.cy / 2);
if (state & ODS_SELECTED)
{
pt.Offset(1, 1);
}
int nMode = pDC->SetBkMode(TRANSPARENT);
if (state & ODS_DISABLED)
{
pDC->DrawState(pt, szExtent, strText, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
}
else
{
pDC->DrawState(pt, szExtent, strText, DSS_NORMAL, TRUE, 0, (HBRUSH)NULL);
}
pDC->SelectObject(hOldFont);
pDC->SetBkMode(nMode);
}
pDC->RestoreDC(nSaveDC);
}
最后在调用验证效果:
1)在dialog中拖入一个button,设置ownerdraw。
2)装载需要的位图资源。
3)对话框头文件中
#include "ImgButton.h"
.......
.......
CImgButton m_cImgBtn;
.......
4)对话框cpp中进行初始化
m_cImgBtn.SubclassDlgItem(IDC_BUTTON5, this);
m_cImgBtn.LoadBitmaps(IDB_BTNLONGU, IDB_BTNLONGD, IDB_BTNLONGU);
m_cImgBtn.SizeToContent();
m_cImgBtn.SetTextColor(RGB(0,0,0));
最后
以上就是喜悦冥王星为你收集整理的MFC 自定义按钮实现文字和图片同时显示效果的全部内容,希望文章能够帮你解决MFC 自定义按钮实现文字和图片同时显示效果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复