求“使用VC++在有背景图片的对话框中实现静态文本的透明显示”完整帖,或给个解决方法。 “使用VC++在有背景图片的对话框中实现静态文本的透明显示”完整帖中提供了三种方法,但是没有看到它的第3种方法。前两种,仅适合静态文本显示。如果我需要将静态文本在程序中变化的时候,就不行了。所以 ,我的最终目的是静态文本在程序中可以变化,而且静态文本的背景为透明。即静态文本的背景其实是对话框的背景图片。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第三种方法就是直接在OnPaint()中将字符串写到对话框窗口上.在OnPaint()中:pDC->SetBkMode(TRANSPARENT);pDC->TextOut(100, 100, sComment);在类中定义:CString sComment;在改变字符串的地方:sComment = _T("你想说的话;");Invalidate(); LZ说的是控制的透明显示还是文本的透明显示:如是文本:SetBkMode(TRANSPARENT);TextOut(10,10,YouString);如果是控制,如CStatic类http://www.moon-soft.com/doc/40209.htm 我说的是静态文本空间背景透明。即控件方式去只显示文本,背景仍然是对话框的背景。有一个作用就是,这个控件的文本我需要更新。to 裁缝:按照你的方法,重载onpaint,so,如果我更新文本内容时,如何做到。谢谢。。 文本可以用TextOut啊OnPaint() 中添加代码如下{ CPaintDC dc(this); // device context for painting dc.SetBkColor(RGB(192,192,192)); //设置背景色 dc.SetTextColor(RGB(255,0,0)); //设置字体色 dc.TextOut(200,200,m_strDisplay);//m_strDisplay是全局变量,只要对它做改变就可以了,OnPaint()可以在使用Invalidate(false);后自动调用} 如果对话框用了内存DC,将内存DC传给Static,这个是最好的办法 BOOL CColorStatic::OnEraseBkgnd(CDC* pDC) { CStatic::OnEraseBkgnd(pDC); CRect rc; GetWindowRect(rc); GetParent()->ScreenToClient(rc); pDC->Bitblt(0, 0, rc.Width(), rc.Height(), m_pParentMemDC, rc.top, rc.left, SRCCOPY); return TRUE; } 映射WM_CTLCOLOR消息也是一种方法,这样做有时会出现不刷新的情况OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ..... if (nCtlColor==CTLCOLOR_STATIC) { pDC->SetBkMode(TRANSPARENT); return (HBRUSH)::GetStockObject(NULL_BRUSH); } 如何增加tab control控件的PAGE数量 继承了一个CWND的类,并且在其中动态创建一个控件,为什么会没有反应 有关按钮有效的问题. MFC中怎么删除一个文件? 宽带、某些学校的上网认证的原理是什么?说来听听,说的有道理就散分!越具体越好,分越高! 子窗口的消息是自己处理还是交给父窗口处理?有什么原则吗? 我~!是学生!只好“弱弱”的问?! 请教如何将数据库与MSFlexGrid绑定显示 有关csdn中speech SDK5.1的一个小问题? 在VC中如何改变运用程序外观 讨论:继承和对象成员的区别。 IE浏览器交互的一个问题,请帮忙!
在OnPaint()中:
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(100, 100, sComment);在类中定义:
CString sComment;在改变字符串的地方:
sComment = _T("你想说的话;");
Invalidate();
如是文本:
SetBkMode(TRANSPARENT);
TextOut(10,10,YouString);
如果是控制,如CStatic类
http://www.moon-soft.com/doc/40209.htm
to 裁缝:
按照你的方法,重载onpaint,so,如果我更新文本内容时,如何做到。谢谢。。
{
CPaintDC dc(this); // device context for painting dc.SetBkColor(RGB(192,192,192)); //设置背景色
dc.SetTextColor(RGB(255,0,0)); //设置字体色 dc.TextOut(200,200,m_strDisplay);//m_strDisplay是全局变量,只要对它做改变就可以了,OnPaint()可以在使用Invalidate(false);后自动调用
}
BOOL CColorStatic::OnEraseBkgnd(CDC* pDC)
{
CStatic::OnEraseBkgnd(pDC);
CRect rc;
GetWindowRect(rc);
GetParent()->ScreenToClient(rc);
pDC->Bitblt(0, 0, rc.Width(), rc.Height(), m_pParentMemDC, rc.top, rc.left, SRCCOPY);
return TRUE;
}
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
.....
if (nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}