如何使静态文本文字透明地显示在背景上

ywolf0214 2008-04-25 10:36:44
我正在做一个MFC界面,在位图上有一个静态文本控件,想使文字的背景直接是文图而不是静态文本的框框。请问该怎么做?
另外,我自己试了一下方案,但是不行:
\\\\\\\.h文件中
CBrush m_brush;
COLORREF m_color;
\\\\\\\.cpp文件中OnInitDialog()下
m_brush.CreateSolidBrush(RGB(255,255,255));
m_color=RGB(0,0,0)

\\\\\\\\消息处理
HBRUSH CWordDlg::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_STATIC2)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(m_color);
return (HBRUSH)m_brush.GetSafeHandle();
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
把static text的transparent属性设置为true也不行。
...全文
441 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
lz要干嘛?
Chenbitian 2008-04-25
  • 打赏
  • 举报
回复
楼主想在界面显示文字不一定要在文本控件里面显示的,你可以直接在paint函数里面画,用 dc.DrawText (const CString& str, LPRECT lpRect, UINT nFormat),第一个参数就是你要显示的字符串,第二个是客户去的某一个区域,第三个是标记,可以参考msdn的说明。
jingang_83 2008-04-25
  • 打赏
  • 举报
回复
给个类你把:

class CTransparentStatic : public CStatic
{
DECLARE_DYNAMIC(CTransparentStatic)
public:
CTransparentStatic();
virtual ~CTransparentStatic();
void UpdateSurface();
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};


// TransparentStatic.cpp : implementation file
//

#include "TransparentStatic.h"
#include ".\transparentstatic.h"


// CTransparentStatic
// Map "Static Styles" to "Text Styles"
#define MAP_STYLE(src, dest) if(dwStyle & (src)) dwText |= (dest)
#define NMAP_STYLE(src, dest) if(!(dwStyle & (src))) dwText |= (dest)


IMPLEMENT_DYNAMIC(CTransparentStatic, CStatic)
CTransparentStatic::CTransparentStatic()
{
}

CTransparentStatic::~CTransparentStatic()
{
}


BEGIN_MESSAGE_MAP(CTransparentStatic, CStatic)
ON_WM_PAINT()
END_MESSAGE_MAP()



// CTransparentStatic message handlers
void CTransparentStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting

// Where to draw text
CRect client_rect;
GetClientRect(client_rect);

// Get the caption
CString szText;
GetWindowText(szText);

// Get the font
CFont *pFont, *pOldFont;
pFont = GetFont();
pOldFont = dc.SelectObject(pFont);

DWORD dwStyle = GetStyle(), dwText = 0;

MAP_STYLE( SS_RIGHT, DT_RIGHT );
MAP_STYLE( SS_CENTER, DT_CENTER );
MAP_STYLE( SS_CENTERIMAGE, DT_VCENTER | DT_SINGLELINE );
MAP_STYLE( SS_NOPREFIX, DT_NOPREFIX );
MAP_STYLE( SS_WORDELLIPSIS, DT_WORD_ELLIPSIS );
MAP_STYLE( SS_ENDELLIPSIS, DT_END_ELLIPSIS );
MAP_STYLE( SS_PATHELLIPSIS, DT_PATH_ELLIPSIS );

NMAP_STYLE( SS_LEFTNOWORDWRAP |
SS_CENTERIMAGE |
SS_WORDELLIPSIS |
SS_ENDELLIPSIS |
SS_PATHELLIPSIS, DT_WORDBREAK );

// Set transparent background
dc.SetBkMode(TRANSPARENT);

// Draw the text
dc.DrawText(szText, client_rect, dwText);

// Select old font
dc.SelectObject(pOldFont);
}

void CTransparentStatic::UpdateSurface()
{
CRect (rc);
GetWindowRect(rc);
//RedrawWindow();

GetParent()->ScreenToClient(rc);
GetParent()->InvalidateRect(rc,TRUE);
//GetParent()->UpdateWindow();
}

菜牛 2008-04-25
  • 打赏
  • 举报
回复
if(pWnd->GetDlgCtrlID()==IDC_STATIC2) 
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(m_color);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧