找回密码
 加入
搜索
查看: 9437|回复: 16

[图形处理] [已解决]如何在用RedrawWindow刷新时不让桌面图标闪动

 火.. [复制链接]
发表于 2010-8-22 15:31:03 | 显示全部楼层 |阅读模式
本帖最后由 xyold1 于 2010-8-23 17:16 编辑

下面是帮助里的一段代码,用于显示一个十字,再刷新屏幕,除去显示

我稍修改了一下,循环显示

我的问题是如何在刷新时不让桌面图标闪动,因为我见为别的程序刷新时很“安静”
#Include <WinAPI.au3>
_WinAPI_RedrawWindow($hWnd [, $tRect = 0 [, $hRegion = 0 [, $iFlags = 5]]])

是不是修改 $iFlags的值?

请求帮助!
#include <WindowsConstants.au3>
#include <WinAPI.au3>
While 1
ShowCross(@DesktopWidth / 2, @DesktopHeight / 2, 20, 2, 0xFF, 3000)
WEnd
Func ShowCross($start_x, $start_y, $length, $width, $color, $time)
        Local $hDC, $hPen, $obj_orig

        $hDC = _WinAPI_GetWindowDC(0) ; DC of entire screen (desktop)
        $hPen = _WinAPI_CreatePen($PS_SOLID, $width, $color)
        $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
        
        _WinAPI_DrawLine($hDC, $start_x - $length, $start_y, $start_x - 5, $start_y) ; horizontal left
        _WinAPI_DrawLine($hDC, $start_x + $length, $start_y, $start_x + 5, $start_y) ; horizontal right
        _WinAPI_DrawLine($hDC, $start_x, $start_y - $length, $start_x, $start_y - 5) ; vertical up
        ;        _WinAPI_DrawLine($hDC, $start_x, $start_y + $length, $start_x, $start_y + 5) ; vertical down
        _WinAPI_MoveTo($hDC, $start_x, $start_y + $length)
        _WinAPI_LineTo($hDC, $start_x, $start_y + 5)

        Sleep($time) ; show cross over screen for defined seconds

        ; refresh desktop (clear cross)
        _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
        ; clear resources
        _WinAPI_SelectObject($hDC, $obj_orig)
        _WinAPI_DeleteObject($hPen)
        _WinAPI_ReleaseDC(0, $hDC)
EndFunc   ;==>ShowCross

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-8-22 15:38:15 | 显示全部楼层
刷新肯定要闪的,除非不刷新,找别的办法
 楼主| 发表于 2010-8-22 16:26:28 | 显示全部楼层
清除所画的图形,除了刷新,还有别的方法吗
发表于 2010-8-22 16:37:38 | 显示全部楼层
画在透明的窗体上呢?
 楼主| 发表于 2010-8-22 16:47:11 | 显示全部楼层
回复 4# rolaka


    这个图形是画在屏幕上的

就是不知怎么清除

刷新可以,但会使桌面图标一闪,像按了F5似的

在DOS里一个clear就清屏了,这个怎么弄啊?
发表于 2010-8-22 16:48:40 | 显示全部楼层
画在透明gui上,清除时直接GuiDelete就行了
 楼主| 发表于 2010-8-22 17:12:47 | 显示全部楼层
回复 6# afan


    透明GUI还要做鼠标穿透

算了,还是用这个代码吧,闪就闪吧
发表于 2010-8-22 19:21:13 | 显示全部楼层
回复  afan


    透明GUI还要做鼠标穿透

算了,还是用这个代码吧,闪就闪吧{:face ( ...
xyold1 发表于 2010-8-22 17:12



    都有现成的东西...一搜就搜到了
发表于 2010-8-22 19:23:56 | 显示全部楼层
学习了.....
 楼主| 发表于 2010-8-22 19:28:20 | 显示全部楼层
回复 8# rolaka

搜了一下,也试着做了一下,看着那长长的代码就感觉其效率不咋地

创建窗体,设置透明,再设鼠标穿透,再画图,最后删除窗体,远不如真接在屏幕上画图来得快
发表于 2010-8-22 21:50:10 | 显示全部楼层
本帖最后由 afan 于 2010-8-22 21:52 编辑

回复 10# xyold1


    透明就不用穿透了吧… 你有何应用哦,举实例说明会更好
有时候代码虽长,但耗时1毫秒都不到,看怎么优化了。但优化不一定就是短代码,优化的是效率
 楼主| 发表于 2010-8-22 22:38:45 | 显示全部楼层
回复 11# afan

仿一个迷你背单词的程序写的,用特大号的字在屏幕上显示当前朗读的内容

它是画在屏幕上的,切换很静,而我做不来

用透明窗口试过了,刷新窗口不能更新显示的文字

而Guidelete后,我的电脑桌面也会闪,虽然加了鼠标穿透,但是在切换显示时,弹出的鼠标右键菜单会消失

我还是用原来的办法吧
发表于 2010-8-22 22:41:27 | 显示全部楼层
回复 12# xyold1


    什么软件,不大的话我下个看看
 楼主| 发表于 2010-8-22 23:05:40 | 显示全部楼层
回复 13# afan
主程序也不大866K,就是压缩包里加了一个TTS引擎,使得压缩包为8M多
多特有下载
http://www.duote.com/soft/2679.html
发表于 2010-8-23 00:56:25 | 显示全部楼层
回复 14# xyold1


    弄了半天,才调出那个所谓的大字…… 真晕
看了下。它的确是直接画在屏幕上的(而且只画在指定的区域),要达到这样的效果也很简单。
直接在_WinAPI_RedrawWindow()中设置第二个参数即可
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-19 12:36 , Processed in 0.086539 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表