Could you tell me why?
解决方案 »
- CListCtrl 怎样改变单行的文本颜色
- 关于字符串之间的关系
- 请[nlstone(天外流星) ] 进来接分!
- 如何实现象IE那样添加到收藏夹的功能呢?
- 在LISTVIEW中如何合并某行中所有单元格
- 如何在对话框中添加工具栏
- 急!请教:telnet到163.com的pop3服务器收信碰到的邮件长度问题。
- ExecuteSQL(_T("RENAME TABLE table1 TO table2"))出现异常?
- 用winexec("for1 test.for >> info.txt",SW_HIDE)为什么不行?
- 请问,考MCDBA的人可以给我一些建议吗?我想考
- 构件DCOM组件时代理/存根模块怎么生成,非常感谢
- 怎样将基于对话框的应用程序图标(IDR_MAINFRANE)换成bmp/jif图标?
不可能。Win2K里面的所谓透明效果也只能是固定的,而不能随背景变化而变化。M$在自己的系统里都没实现,一般别人就更不可能做做到了!
然后得到背景,建立一个内存DC 把背景保留到 DC 里面
然后显示窗口
这个方法一定行
根据WINDOWS机理,当你的程序打开时,你程序背后就不会画了
覆盖以后,被你覆盖的区域变成无效区域,windows是不会去画无效区域的,
解决部分问题要点(如果能解决的话. xixi ):
1。star_chen(隆) 说的windows不会去画无效区域,但我们可以向窗口遮住的所有窗口发重画消息即可搞定。(最简单的是枚举所有窗体发消息,也免得判断遮住哪些窗体了)
2。“使用ShowWindow( SW_HIDE )需要Sleep( 50 ),才能真正得到背景画面”,在这50之间,会发生闪烁,我想,如果你的窗体足够小,比如在操作截屏时,窗体类似于WinAmp那种小条条,又能放下足够的按钮,又小,是不需要50的吧。不过另外有个问题:由于你的窗口不停的show , hide , show , hide ,用户要操作你的程序,比如按按钮什么的,好像也是个麻烦事啊。很大的可能性是按到后面的窗体上了。
上钩子,截获gdi函数调用(方法见许多名为屏幕取词的贴子,个人以为截获个GetDC/ReleaseDC比较好),在每次调用GetDC就判断一下得到DC的ViewPort是不是在自己窗口底下,然后自己创建的一个兼容的MemDC给它乱画,画完在ReleaseDC时再贴回去(如果是在自己窗口底下,再顺便加点什么Alpha混合之类的)。最后顺便用MemDC更新一下自己保存的背景Bitmap。
随便说说...
隐藏后Sleep(50)才能得到背景画面,我想是因为这样才能保证本进程挂起,别的进程被调度,进而处理重画消息,重画背景。否则可能从隐藏到重现一直是本进程在运行,别人没有机会重画。而Sleep好像最少50ms,所以本窗口再小也不能缩短时间。
如果In355Hz(好象一条狗)说的用内存DC的办法能行,倒是不错。
好好帮你!