求“使用VC++在有背景图片的对话框中实现静态文本的透明显示”完整帖,或给个解决方法。

chanmmon 2007-02-07 11:26:56
“使用VC++在有背景图片的对话框中实现静态文本的透明显示”完整帖中提供了三种方法,但是没有看到它的第3种方法。

前两种,仅适合静态文本显示。如果我需要将静态文本在程序中变化的时候,就不行了。
所以 ,我的最终目的是静态文本在程序中可以变化,而且静态文本的背景为透明。即静态文本的背景其实是对话框的背景图片。
...全文
664 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodboyws 2007-02-09
  • 打赏
  • 举报
回复
映射WM_CTLCOLOR消息也是一种方法,这样做有时会出现不刷新的情况
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
.....
if (nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);

return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
goodboyws 2007-02-09
  • 打赏
  • 举报
回复
如果对话框用了内存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;
}
东文-桑晨 2007-02-08
  • 打赏
  • 举报
回复
文本可以用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);后自动调用
}
chanmmon 2007-02-08
  • 打赏
  • 举报
回复
我说的是静态文本空间背景透明。即控件方式去只显示文本,背景仍然是对话框的背景。

有一个作用就是,这个控件的文本我需要更新。
to 裁缝:
按照你的方法,重载onpaint,so,如果我更新文本内容时,如何做到。谢谢。。
CharlesPrince 2007-02-07
  • 打赏
  • 举报
回复
LZ说的是控制的透明显示还是文本的透明显示:
如是文本:
SetBkMode(TRANSPARENT);
TextOut(10,10,YouString);
如果是控制,如CStatic类
http://www.moon-soft.com/doc/40209.htm
kongwe 2007-02-07
  • 打赏
  • 举报
回复
第三种方法就是直接在OnPaint()中将字符串写到对话框窗口上.
在OnPaint()中:
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(100, 100, sComment);

在类中定义:
CString sComment;

在改变字符串的地方:
sComment = _T("你想说的话;");
Invalidate();

15,979

社区成员

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

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