透明的CheckBox,我网上找到了这些主要代码如下:
OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect rect;
GetClientRect(&rect);
CRect BoxRect;
BoxRect=rect;
BoxRect.right =BoxRect.left +15;
dc.DrawFrameControl(BoxRect,DFC_BUTTON,DFCS_BUTTONCHECK|GetCheck()?DFCS_CHECKED :0);
CFont myFont;
myFont.CreatePointFont (120,_T("宋体"));
CFont *pOldFont=(CFont *)dc.SelectObject (&myFont);
dc.SetBkMode(TRANSPARENT);
CString StrWndText;
GetWindowText(StrWndText);
rect.OffsetRect (20,0);
dc.DrawText(StrWndText, rect, DT_LEFT|DT_VCENTER|DT_SINGLELINE);
dc.SelectObject (pOldFont);
myFont.DeleteObject ();
// Do not call CButton::OnPaint() for painting messages
}
#pragma once
#include "afxwin.h"
class CTransCheckBox : public CButton
{
public:
CTransCheckBox(void);
~CTransCheckBox(void);
DECLARE_MESSAGE_MAP()
afx_msg void OnPaint();
LOGFONT m_lf; //
CFont m_font; // 获取原有的文本的字体
};
#include "StdAfx.h"
#include "TransCheckBox.h"
CTransCheckBox::CTransCheckBox(void)
{
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(m_lf),&m_lf);
m_font.CreateFontIndirect(&m_lf);
}
CTransCheckBox::~CTransCheckBox(void)
{
m_font.DeleteObject();
}
BEGIN_MESSAGE_MAP(CTransCheckBox, CButton)
ON_WM_PAINT()
END_MESSAGE_MAP()
//实现CheckBox的透明的类型
void CTransCheckBox::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CButton::OnPaint()
CRect rect;
GetClientRect(&rect);
CRect BoxRect;
BoxRect = rect;
BoxRect.right = BoxRect.left +15;
dc.DrawFrameControl(BoxRect,DFC_BUTTON,DFCS_BUTTONCHECK|GetCheck()?DFCS_CHECKED :0);
CFont *pOldFont = (CFont *)dc.SelectObject(&m_font);
dc.SetBkMode(TRANSPARENT);
CString StrWndText;
GetWindowText(StrWndText);
rect.OffsetRect (20,0);
dc.DrawText(StrWndText, rect, DT_LEFT|DT_VCENTER|DT_SINGLELINE);
dc.SelectObject(pOldFont);
//Do not call CButton::OnPaint() for painting messages
}