社区
ATL
帖子详情
写了一个进度条但闪得厉害!!!
ji_hui
2002-03-29 01:06:44
关于控件的刷新,Microsoft是怎么做的,大家讨论讨论!
...全文
84
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作畫.我作過類似的控件﹐應該沒有問題。
实验室耗材管理系统-基于springboot实验室耗材管理系统的设计与实现-实验室耗材管理系统源码.zip
实验室耗材管理系统-基于springboot实验室耗材管理系统的设计与实现-实验室耗材管理系统源码.zip
安装包-onnxruntime-0.1.2-cp36-cp36m-manylinux1_x86_64.whl.zip
安装包-onnxruntime-0.1.2-cp36-cp36m-manylinux1_x86_64.whl.zip
Java多线程与并发核心解析
本文整合多线程与并发的核心知识点,涵盖**线程基础、线程池、锁机制、并发工具、volatile、CAS、ThreadLocal**七大模块,每个模块聚焦核心要点、规避冗余描述,便于系统梳理与回顾。
安装包-onnxruntime-1.22.1-cp312-cp312-win_amd64.whl.zip
安装包-onnxruntime-1.22.1-cp312-cp312-win_amd64.whl.zip
安装包-onnxruntime-1.13.1-cp37-cp37m-win32.whl.zip
安装包-onnxruntime-1.13.1-cp37-cp37m-win32.whl.zip
ATL
3,248
社区成员
48,531
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章