社区
ATL
帖子详情
写了一个进度条但闪得厉害!!!
ji_hui
2002-03-29 01:06:44
关于控件的刷新,Microsoft是怎么做的,大家讨论讨论!
...全文
60
8
打赏
收藏
写了一个进度条但闪得厉害!!!
关于控件的刷新,Microsoft是怎么做的,大家讨论讨论!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ji_hui
2002-04-03
打赏
举报
回复
再等两天如果没人回答我就
给分了!
ji_hui
2002-04-02
打赏
举报
回复
写错了,应是“代码很少,而且我改了以后,现在却不显示了”
我是用VB6测试的,测试代码如下:
Private Sub Command1_Click()
Dim i As Long
Progress1.Min = 0
Progress1.Max = 10000
For i = 0 To 10000
Progress1.SetPos i
DoEvents
Next i
End Sub
其中若不加DOENENTS,循环很快完成,加上DOEVENTS后开始单步进行,但刷新很差,出现好多横条。
ji_hui
2002-04-02
打赏
举报
回复
代码很少,而且我改了以后,现在却一显示了。
我不知下面的代码问题出在哪,帮我看看。
示例代码如下:
HRESULT OnDraw(ATL_DRAWINFO& di)
{
char buf[10];
ZeroMemory(buf,10);
ltoa(lngPos,buf,10);
LPCTSTR pszText = buf;
long lngTemp;
long intLeft;
long intRight;
long intTop;
long intBottom;
long intWidth;
lngTemp=lngMax-lngMin;
if (lngTemp>0)
{
lngTemp=lngPos*100/lngTemp;
}
else
{
lngTemp=100;
}
COLORREF clrFore;
COLORREF clrBack;
COLORREF clrBar;
OleTranslateColor(colorFore,NULL,&clrFore);
OleTranslateColor(colorBack,NULL,&clrBack);
OleTranslateColor(colorBar,NULL,&clrBar);
RECT& rc = *(RECT*)di.prcBounds;
intLeft=rc.left ;
intRight=rc.right ;
intTop=rc.top ;
intBottom=rc.bottom ;
intWidth=(intRight-intLeft)*lngTemp/100;
RECT rcBar;
rcBar.left =intLeft;
rcBar.top =intTop;
rcBar.right =intWidth+intLeft;
rcBar.bottom =intBottom;
HDC hDC;
HBITMAP hBitmap;
HBITMAP hOldBitmap;
HBRUSH hBrush;
HBRUSH hBrushBar;
hDC=CreateCompatibleDC (di.hdcDraw );
hBitmap=CreateCompatibleBitmap (hDC ,rc.right -rc.left ,rc.bottom -rc.top );
hOldBitmap=(HBITMAP)SelectObject (hDC,hBitmap);
hBrush=CreateSolidBrush(clrBack);
hBrushBar=CreateSolidBrush(clrBar);
SetTextAlign(hDC, TA_LEFT|TA_TOP|TA_NOUPDATECP );
SetBkMode(hDC ,TRANSPARENT);
SetTextColor(hDC ,clrFore);
FillRect(hDC ,&rc,hBrush);
FillRect(hDC ,&rcBar,hBrushBar);
DrawEdge(hDC ,&rc,EDGE_SUNKEN,BF_RECT);
DrawTextEx(hDC ,(char*)pszText,lstrlen(pszText),&rc,DT_SINGLELINE|DT_VCENTER|DT_CENTER,NULL);
BitBlt (di.hdcDraw ,rc.left ,rc.top ,rc.right -rc.left ,rc.bottom -rc.top ,hDC,rc.left ,rc.top ,SRCCOPY);
SelectObject(hDC,hOldBitmap);
DeleteObject (hBitmap);
DeleteObject(hBrush);
DeleteObject(hBrushBar);
DeleteDC (hDC);
return S_OK;
}
LLnju
2002-04-01
打赏
举报
回复
是啊。你的具体应用环境是什么?在 memdc 中把图形全部画好后再 bitblt 到屏幕一般不会感觉到闪烁的啊。可能是你向内存中绘图的时间太长了吧,进度条应该不会有很繁重的重绘吧,应该不会闪烁的,用 DDraw 应该用不着的。
ji_hui
2002-04-01
打赏
举报
回复
我以前试过用MEMDC,最好只是一次 BitBlt,效果虽有改善,但也不是特别理想。
LLnju(LLnju) 兄,DDraw是不是DirectDraw?
BigBigFish
2002-04-01
打赏
举报
回复
同上,建内存DC,最好重载WM_ERASEBKGND,return TRUE
LLnju
2002-03-29
打赏
举报
回复
尽量在 memdc 中画图,最后一次真正的显示时最好只是一次 BitBlt, 在GDI函数中就这个速度还不错,如果你的要求实在很高,就用 DDraw。 我以前也做过一个,在 200 * 150 的区域上以 100 次/秒 的速度刷新也没有任何闪烁感。
gxh
2002-03-29
打赏
举报
回复
使用內存DC作畫.我作過類似的控件﹐應該沒有問題。
Python小程序开发实战_06_
进度条
+新闻发布实例
基于微信小程序平台开发的的拍卖系统,项目主要分为圈子和拍卖两大部分业务,通过圈子...系统包含了小程序、API、运营中心三个子系统组成。在真实的开发环境和业务需求中进行开发,让你17天从小白到微信小程序高高手。
python创建
一个
模块文件、互换两个数的值_python之路——基础篇(2)模块
模块:os、sys、time、logging、json/pickle、hashlib、random、re模块分为三种:自定义模块第三方模块内置模块自定义模块1、定义模块将一系列功能函数或常量封装为
一个
独立的.py或多个.py文件。2、导入模块1 import...
大数据小说 | 如何用一小时看透
一个
初识的姑娘
“科学算命” “同学,你的背包拉链没拉好。这个社会越来越险恶,像你这么...当她的手指触到贴着射手座符号的MacBook Air时,我趁机向她抛出
一个
善意而知性的微笑:“有兴趣看看最近的运势吗?” 她顺着我的手势望...
《crossfire》游戏分析
《穿越火线》是一款第一人称射击游戏,虽然游戏中的元素涵盖了现代战争游戏所应有的现代武器、高科技等,但其整体风格却与传统现代战争游戏有所不同。《穿越火线》在游戏风格上融合了多种元素,包括欧美风、中国风、...
什么东西决定着软件的品质
如果有人问您:您认为影响
一个
软件品质的因素有哪些?您脑子里可能会闪出一堆: 功能,界面,运行速度,安全性,扩展性, 可维护性,操作性……人者见人,智者见智,每个人对软件理解不一样,答案自然也不尽相同,也正是由于对...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章