如何将CStatic控件的背景色设为透明呢? 如何将CStatic控件的背景色设为透明呢,在对话框中 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从CStatic类派生自己类,重载ON_WM_CTLCOLOR_REFLECT()。需要现成的可以告诉我Mail,我发给你或者你到网上搜索一下! 参考代码://头文件/*=============================================================================== ======== File name : StaticTrans.h ======== Creation date : 7/10/2001 ======== Author(s) : Dany Cantin ======== ===============================================================================*/#ifndef STATICTRANS_H#define STATICTRANS_H#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000/////////////////////////////////////////////////////////////////////////////// CStaticTrans window#define TRANS_BACK -1class CStaticTrans : public CStatic{ // Constructionpublic: CStaticTrans(); private: COLORREF m_TextColor; COLORREF m_BackColor; CBrush m_Brush; // Operationspublic: void SetTextColor(COLORREF col) { m_TextColor = col; UpdateCtrl(); } void SetBackColor(COLORREF col) { m_BackColor = col; UpdateCtrl(); }private: void UpdateCtrl(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CStaticTrans) //}}AFX_VIRTUAL// Implementationpublic: virtual ~CStaticTrans(); // Generated message map functionsprotected: //{{AFX_MSG(CStaticTrans) afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); //}}AFX_MSG DECLARE_MESSAGE_MAP()};#endif // STATICTRANS_H //CPP文件/*=============================================================================== ======== File name : StaticTrans.cpp ======== Creation date : 7/10/2001 ======== Author(s) : Dany Cantin ======== ===============================================================================*/#include "stdafx.h"#include "StaticTrans.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CStaticTransCStaticTrans::CStaticTrans(){ m_TextColor = RGB(0, 0, 0); m_BackColor = TRANS_BACK; }CStaticTrans::~CStaticTrans(){}BEGIN_MESSAGE_MAP(CStaticTrans, CStatic) //{{AFX_MSG_MAP(CStaticTrans) ON_WM_CTLCOLOR_REFLECT() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CStaticTrans message handlersHBRUSH CStaticTrans::CtlColor(CDC* pDC, UINT nCtlColor) { m_Brush.DeleteObject(); if (m_BackColor == TRANS_BACK) { m_Brush.CreateStockObject(HOLLOW_BRUSH); pDC->SetBkMode(TRANSPARENT); } else { m_Brush.CreateSolidBrush(m_BackColor); pDC->SetBkColor(m_BackColor); } pDC->SetTextColor(m_TextColor); return (HBRUSH)m_Brush;}void CStaticTrans::UpdateCtrl(){ CWnd* pParent = GetParent(); CRect rect; GetWindowRect(rect); pParent->ScreenToClient(rect); rect.DeflateRect(2, 2); pParent->InvalidateRect(rect, FALSE); } 楼上的都太复杂了只要重载一下窗体的WM_CTLCOLOR事件,然后加入如下代码即可 //Set Static Control BackGround Transparent if(nCtlColor==CTLCOLOR_STATIC) pDC->SetBkMode(TRANSPARENT); return hbr;注意要在设计时将static的风格设为simple pDC->SetBkMode(TRANSPARENT)就够了 重载WM_CTLCOLORpDC->SetBkMode(TRANSPARENT) 重载一下窗体的WM_CTLCOLOR事件,然后加入如下代码 pDC->SetBkMode(TRANSPARENT); return hbr;注意要在设计时将static的风格设为simple更改Static的内容时,要加InvalidateRect 对应static的位置 重载WM_CTLCOLOR,同时将static的属性设置为TRANSPARENTHBRUSH CDialog2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here ////////////////////// // 静态文本控件透明 ////////////////////// if(pWnd->GetDlgCtrlID() == IDC_STATIC) // 需要设置透明背景的static控件的id { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0,0,0));//此处设置字体的颜色 return HBRUSH(GetStockObject(HOLLOW_BRUSH)); } /////////////////// // 结束添加 /////////////////// // TODO: Return a different brush if the default is not desired return hbr;} char数组字符串 有关wm_paint hook的问题? 整数型转换的问题。。 (up有分) 一个树视的问题!100分。 如何用vc++为对话框设置一个热键? 急,高分求救一个简单问题。 >>>>>>>>>>::是程序员,或者准备当前程序员的请近来看这个问题!<<<<<<<<< 透明? 关于控件数组 急,在win7下打不开《设置连接或网络》向导 请问那里有ActiveMovie控件的下载.?? 如何向屏幕输出一个位图?
或者你到网上搜索一下!
//头文件
/*===========================================================================
==== ====
==== File name : StaticTrans.h ====
==== Creation date : 7/10/2001 ====
==== Author(s) : Dany Cantin ====
==== ====
===========================================================================*/#ifndef STATICTRANS_H
#define STATICTRANS_H#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CStaticTrans window#define TRANS_BACK -1class CStaticTrans : public CStatic
{
// Construction
public:
CStaticTrans();
private:
COLORREF m_TextColor;
COLORREF m_BackColor;
CBrush m_Brush;
// Operations
public:
void SetTextColor(COLORREF col) { m_TextColor = col;
UpdateCtrl(); }
void SetBackColor(COLORREF col) { m_BackColor = col;
UpdateCtrl(); }private:
void UpdateCtrl();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CStaticTrans)
//}}AFX_VIRTUAL// Implementation
public:
virtual ~CStaticTrans(); // Generated message map functions
protected:
//{{AFX_MSG(CStaticTrans)
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};
#endif // STATICTRANS_H
/*===========================================================================
==== ====
==== File name : StaticTrans.cpp ====
==== Creation date : 7/10/2001 ====
==== Author(s) : Dany Cantin ====
==== ====
===========================================================================*/#include "stdafx.h"
#include "StaticTrans.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CStaticTransCStaticTrans::CStaticTrans()
{
m_TextColor = RGB(0, 0, 0);
m_BackColor = TRANS_BACK;
}CStaticTrans::~CStaticTrans()
{
}
BEGIN_MESSAGE_MAP(CStaticTrans, CStatic)
//{{AFX_MSG_MAP(CStaticTrans)
ON_WM_CTLCOLOR_REFLECT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CStaticTrans message handlersHBRUSH CStaticTrans::CtlColor(CDC* pDC, UINT nCtlColor)
{
m_Brush.DeleteObject();
if (m_BackColor == TRANS_BACK) {
m_Brush.CreateStockObject(HOLLOW_BRUSH);
pDC->SetBkMode(TRANSPARENT);
}
else {
m_Brush.CreateSolidBrush(m_BackColor);
pDC->SetBkColor(m_BackColor);
}
pDC->SetTextColor(m_TextColor);
return (HBRUSH)m_Brush;
}void CStaticTrans::UpdateCtrl()
{
CWnd* pParent = GetParent();
CRect rect;
GetWindowRect(rect);
pParent->ScreenToClient(rect);
rect.DeflateRect(2, 2);
pParent->InvalidateRect(rect, FALSE);
}
只要重载一下窗体的WM_CTLCOLOR事件,然后加入如下代码即可
//Set Static Control BackGround Transparent
if(nCtlColor==CTLCOLOR_STATIC)
pDC->SetBkMode(TRANSPARENT);
return hbr;
注意要在设计时将static的风格设为simple
pDC->SetBkMode(TRANSPARENT)
pDC->SetBkMode(TRANSPARENT);
return hbr;
注意要在设计时将static的风格设为simple更改Static的内容时,要加InvalidateRect 对应static的位置
HBRUSH CDialog2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here //////////////////////
// 静态文本控件透明
//////////////////////
if(pWnd->GetDlgCtrlID() == IDC_STATIC) // 需要设置透明背景的static控件的id
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,0));//此处设置字体的颜色
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}
///////////////////
// 结束添加
///////////////////
// TODO: Return a different brush if the default is not desired
return hbr;
}