大家知道,如果用API函数直接画屏幕,当刷新速度快时闪烁现象是很严重的
我用了一个CreateCompatibleDC,创建一个与屏幕某区域兼容的设备场景
然后在这个兼容DC中画图,最后用Bitblt拷贝到屏幕区域
要求重画的时候我想用InvalidateRect,但是这个函数的第一个参数是一个hwnd
应该用我创建的这个DC对应的hwnd,在C下可以用GetSafehwnd这个API函数获得
可是VB下没有这个函数,哪位高人知道该怎么解决这个问题?
我的最终目的是要解决屏幕重画时的闪烁问题。
我用了一个CreateCompatibleDC,创建一个与屏幕某区域兼容的设备场景
然后在这个兼容DC中画图,最后用Bitblt拷贝到屏幕区域
要求重画的时候我想用InvalidateRect,但是这个函数的第一个参数是一个hwnd
应该用我创建的这个DC对应的hwnd,在C下可以用GetSafehwnd这个API函数获得
可是VB下没有这个函数,哪位高人知道该怎么解决这个问题?
我的最终目的是要解决屏幕重画时的闪烁问题。
解决方案 »
- 我计算得到的数值和JS算出的不一样
- 关于listview空间的问题,高手们来帮忙啊!
- vb中用记录集打开excel,第一次运行时会报错,提示:系统不支持所选择的排序
- 请教:怎样才能关掉windows下的进程?比如怎么关掉“abcdefg.exe”进程?
- 请问如何连接局域网内服务器上的Access数据库?
- 用vb6.0调用webservice接口进总是超时,请高手帮忙.在线等
- reposition在事件中起的是什么作用?
- 修改硬盘物理id后果
- 数据库中明明有,为什么查询时老是报“记录被删除”
- 谁知道模糊查询
- 如何打开有密码的ACCESS2000数据库。连接语句该怎样写?
- 如何将问题保存到本地硬盘上,都是xml不好办
InvalidateRect只是设置要刷新的区域,你还需要调用 UpdateWindow(UpdateWindow是强制发送WM_PAINT消息,刷新窗口。如果不强制发送,就只有等系统发送该消息了)
我的刷新区域就只是usercontrol,我创建的DC就是usercontrol的兼容DC,我想得到这个DC的hwnd,有法子吗?
难道只能用刷新整个屏幕的办法了吗?能不能只刷新用户控件这一块区域?最好
VB声明
Declare Function WindowFromDC Lib "user32" Alias "WindowFromDC" (ByVal hdc As Long) As Long
说明
取回与某一设备场景相关的窗口的句柄
返回值
Long,执行成功为设备场景对应的窗口的句柄,失败为0
参数表
参数 类型及说明
hdc Long,设备场景句柄