| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6574 人关注过本帖
标题:求助,vc++6.0如何实现文字背景透明显示
只看楼主 加入收藏
ouyang035
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-10
收藏
 问题点数:0 回复次数:7 
求助,vc++6.0如何实现文字背景透明显示
我刚学vc++6.0,求助各位,怎么实现在屏幕上就只显示一行文字,要求窗体其他部位不显示,文字控件的背景也透明啊。非常感谢!!
搜索更多相关主题的帖子: 文字 
2008-06-10 11:51
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
收藏
得分:0 
如果创建的是单文档程序,在视图类的OnCreate函数最后添加:
SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(NULL_BRUSH));//改变背景刷
//NULL_BRUSH为透明背景,BLACK_BRUSH为黑色背景,可将(LONG)GetStockObject(NULL_BRUSH)改为:
(long)::CreateSolidBrush(RGB(255,255,0)),改变RGB宏括号里的数字即可将背景改为不同的颜色。


在视图的OnDraw函数中添加:SetTextColor(*pDC,RGB(255,0,0));//设置文字颜色
    
                  pDC->TextOut(100,100,"显示文字");//显示文字

[[it] 本帖最后由 xunxunmimi 于 2008-6-10 13:22 编辑 [/it]]
2008-06-10 13:20
ouyang035
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-10
收藏
得分:0 
如果是做基于对话框的呢,应该怎么做?
2008-06-10 14:57
qxdzwk
Rank: 1
来 自:xi'an
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-5-27
收藏
得分:0 
我什么我测试没有成功啊???
2008-06-11 00:29
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
直接获取桌面的HDC/CDC,GetDesktopWindow()->GetDC();
然后获取到HDC/CDC后,在调用SetBkMode(TRANSPARENT)设置文件背景色为透明,接着调用TextOut输出就OK拉

2008-06-11 09:04
ouyang035
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-10
收藏
得分:0 
谢谢版主大哥的指点,不过我太菜了。请问可以像第一位回复的那样说的具体点好吗?小菜鸟不胜感激
2008-06-11 11:09
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
首先你必须让对话框不显示出来(貌似你说你的程序是基于Dialog的),这里有个最简单方法切换到资源视图,修改对话框属性,将标题属性以及什么边框之类的属性都去掉,然后再将对话框尺寸修改为1,1那么大小,这样即便是显示出来了,你也看不到。
好了第一部的隐藏界面就OK,不过下任务栏还是会显示对话框的东东拉,这里调用ModifyStyleEx(0,ModifyStyleEx),在对话框的OnInitDialog中调用拉,使对话框变为工具栏属性从而不显示再任务栏中,

第二步就是显示文字了,有两中简单方法,
1是直接获取显示文字的窗口,再获取CDC,最后调用TextOut显示文字
2是内部创建一个CStatic的静态文字控件,然后将该控件的父窗口设置为你要显示文字窗口为父窗口,这样,一个简单文字显示就完成了

其实还有一中更简单方法,
与上不同的是,只不修改对话框大小,其它的都修改,ModifyStyleEx这个也别忘记了,
第二步,为对话框响应WM_ERASEBKGND消息,该消息为画背景消息,注,在添加该消息时,默认对话框消息添加表中是找不到的,需要在消息范围中,选择Windows范围就可以找到了,我也不好载图,你添加消息响应的时候一看应该就能看到,默认消息范围属性是CDialog的,。
最后在OnEraseBkgnd消息中,用OnEraseBkgnd参数CDC *pDc调用TextOut就OK了,不要忘记设置文字背景模式啊,在5楼我就介绍了,就是SetBkMode拉,
最后需要修改的是,将对话框拖动为与显示文字大小差不多的尺寸就是拉

2008-06-11 11:58
ouyang035
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-10
收藏
得分:0 
谢谢各位的指点,特别是版主大哥。现在问题解决了,我是用SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong   (GetSafeHwnd(),GWL_EXSTYLE)|0x00080000)
 HINSTANCE hInst=LoadLibrary("User32.DLL");
 if(hInst) {
  typedef BOOL(WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
  MYFUNC fun=NULL;
  fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
  if(fun)
     fun(this->GetSafeHwnd(),GetSysColor(15),250,1  FreeLibrary(hInst);
}
没有安装新的SDK,不能直接调用SetLayeredWindowAttributes,只好转这么大一个弯,呵呵
2008-06-11 13:43
快速回复:求助,vc++6.0如何实现文字背景透明显示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012249 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved