自定义彩色static text控件类,怎么设置控件背景透明
时间:2011-11-25
来源:互联网
不是设置文字的背景透明,请看代码
.h文件
C/C++ code
cpp文件
C/C++ code
SetBackColor,还有SetTransparent,都只能改变文字的背景,不能改变控件的背景。
SetTransparent 之后,只是文字的背景透明了,但是控件的背景一直是白色不透明的,如果控件拖很大的话会有很大一片白色。
在属性里面设置Transparent也是不行的。
怎么让控件背景透明?
.h文件
C/C++ code
#pragma once // CColorStatic class CColorStatic : public CStatic { DECLARE_DYNAMIC(CColorStatic) public: CColorStatic(); virtual ~CColorStatic(); afx_msg HBRUSH CtlColor( CDC* pDC, UINT nCtlColor ); void SetTextColor( COLORREF crText ); void SetTransparent( bool bTran ); void SetBackColor( COLORREF crBackColor ); protected: DECLARE_MESSAGE_MAP() COLORREF m_crTextColor; COLORREF m_crBackColor; HBRUSH m_hBrush; bool m_bTran; };
cpp文件
C/C++ code
#include "stdafx.h" #include "test.h" #include "ColorStatic.h" // CColorStatic IMPLEMENT_DYNAMIC(CColorStatic, CStatic) CColorStatic::CColorStatic() : m_bTran(0) , m_crTextColor( RGB( 0, 0, 0 ) ) , m_crBackColor( RGB( 240, 240, 240 ) ) { } CColorStatic::~CColorStatic() { } BEGIN_MESSAGE_MAP( CColorStatic, CStatic ) ON_WM_CTLCOLOR_REFLECT() END_MESSAGE_MAP() // CColorStatic message handlers HBRUSH CColorStatic::CtlColor( CDC* pDC, UINT nCtlColor ) { if (CTLCOLOR_STATIC == nCtlColor) { pDC->SetTextColor( m_crTextColor ); pDC->SetBkColor( m_crBackColor ); if (m_bTran == true) pDC->SetBkMode(TRANSPARENT); } return m_hBrush; } void CColorStatic::SetTextColor( COLORREF crText ) { m_crTextColor = crText; RedrawWindow(); } void CColorStatic::SetTransparent( bool bTran ) { m_bTran = bTran; RedrawWindow(); } void CColorStatic::SetBackColor( COLORREF crBackColor ) { m_crBackColor = crBackColor; RedrawWindow(); }
SetBackColor,还有SetTransparent,都只能改变文字的背景,不能改变控件的背景。
SetTransparent 之后,只是文字的背景透明了,但是控件的背景一直是白色不透明的,如果控件拖很大的话会有很大一片白色。
在属性里面设置Transparent也是不行的。
怎么让控件背景透明?
作者: lptsun 发布时间: 2011-11-25
你试下 在oninitdialog 里面 加入 ModifyStyleEx(0,WS_EX_TRANSPARENT);
作者: huangxvhui88 发布时间: 2011-11-25
CtlColor里
return (HBRUSH)GetStockObject(NULL_BRUSH);
return (HBRUSH)GetStockObject(NULL_BRUSH);
作者: shunruo 发布时间: 2011-11-25
引用 1 楼 huangxvhui88 的回复:
你试下 在oninitdialog 里面 加入 ModifyStyleEx(0,WS_EX_TRANSPARENT);
你试下 在oninitdialog 里面 加入 ModifyStyleEx(0,WS_EX_TRANSPARENT);
这是个控件,没有oninitdialog
我在其他地方加了ModifyStyleEx(0,WS_EX_TRANSPARENT);没用
作者: lptsun 发布时间: 2011-11-25
引用 2 楼 shunruo 的回复:
CtlColor里
return (HBRUSH)GetStockObject(NULL_BRUSH);
CtlColor里
return (HBRUSH)GetStockObject(NULL_BRUSH);
如果return (HBRUSH)GetStockObject(NULL_BRUSH);
的话,以前的就不会被擦掉,会出现2个statictext
测试如下代码
C/C++ code
LOGFONT lf = {0}; CPaintDC dc(this); dc.GetCurrentFont()->GetLogFont(&lf); lf.lfCharSet = GB2312_CHARSET; lstrcpy(lf.lfFaceName, TEXT( "Arial" ) ); lf.lfHeight = 20; lf.lfWidth = 12; CFont font; font.CreateFontIndirect( &lf ); m_static123.SetFont( &font );
作者: lptsun 发布时间: 2011-11-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28