社区
界面
帖子详情
如何解决在用户移动窗口时,窗口中的进度条刷新的问题,先谢谢了。
gzl
2004-09-03 04:39:38
大家看到windows资源管理器中复制文件时的进度对话框了吧,用户移动时,它还会指示当前的操作进度。我现在做了个加/解密的进度对话框,用了2个线程,可是,当用户移动它时,进度就停止刷新了,可是后台还在工作啊!如何做到windows资源管理器的效果!!
感谢!!感谢!!
...全文
124
3
打赏
收藏
如何解决在用户移动窗口时,窗口中的进度条刷新的问题,先谢谢了。
大家看到windows资源管理器中复制文件时的进度对话框了吧,用户移动时,它还会指示当前的操作进度。我现在做了个加/解密的进度对话框,用了2个线程,可是,当用户移动它时,进度就停止刷新了,可是后台还在工作啊!如何做到windows资源管理器的效果!! 感谢!!感谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gzl
2004-09-04
打赏
举报
回复
对话框在一个界面线程中,加/解密操作在主线程中。通过主线程向界面线程中postmessage来更新界面的。
evlon
2004-09-03
打赏
举报
回复
把设置操作放在工作线程中.同意楼上!
yaozijian110
2004-09-03
打赏
举报
回复
你是怎么实现进度条的走动的?
如果是用全局变量表示进度,在线程中改变这个变量的值,在对话框中每隔一定时间刷新的话,是不行的。因为移动窗口的时候,进入一个特殊的模态过程,它会阻止窗口过程的执行的。
你可以把更新进度条的操作放到线程里面,这样即使拖动窗口,后台的线程也可以刷新进度条。
下面的程序是我写着玩的,希望对你有一定的参考价值:
DWORD CALLBACK CalculateProc(LPVOID p)
{
THREAD_PARAM *param = (THREAD_PARAM *)p;
UINT n,result,i;
HWND hProgressBar;
n = param->n;
result = 1;
hProgressBar = ::GetDlgItem(param->hDlg,IDC_PROGRESS1);
DWORD dwError = GetLastError();
for(i = 1; i <= n; i++)
{
result *= i;
//显示进度
::SendMessage(hProgressBar,PBM_SETPOS,100 * i / n,0);
//看有没有取消的请求
if (WaitForSingleObject(param->hCancel,0) == WAIT_OBJECT_0)
return 0;
}
param->result = result;
return 0;
}
void CTempttDlg::OnCal()
{
UINT nID;
DWORD dwID;
nID = GetWindowLong(m_wndcal.m_hWnd,GWL_ID);
if (nID == IDC_CAL)
{
if (m_param == NULL) m_param = new THREAD_PARAM;
m_param->hDlg = this->m_hWnd;
m_param->n = 2000000;
m_param->hCancel = CreateEvent(NULL,FALSE,FALSE,NULL);
::SetWindowText(m_wndcal.m_hWnd,TEXT("取消计算"));
::SetWindowLong(m_wndcal.m_hWnd,GWL_ID,IDC_CANCLE);
//启动计算线程
CreateThread(NULL,0,CalculateProc,(LPVOID)m_param,0,&dwID);
}
else if (nID == IDC_CANCLE)
{
if (MessageBox(TEXT("真的要取消计算吗?"),TEXT("取消计算"),MB_YESNO) == IDYES)
{
SetEvent(m_param->hCancel);
::SetWindowText(m_wndcal.m_hWnd,TEXT("计算"));
::SetWindowLong(m_wndcal.m_hWnd,GWL_ID,IDC_CAL);
m_progress.SetPos(0);
}
}
}
Excel VBA实用技巧大全 附书源码
01015获取在Excel主
窗口
中
一个
窗口
所能占有的最大高度和宽度 01016获取当前打印机名称 01017获取MicrosoftExcel剩余内存 01018获取MicrosoftExcel的总内存 01019获取计算机被Excel占用的内存 01020改变Excel
窗口
大小...
易语言 茶凉专用模块
参数 临
时
句柄, 整数型, , 欲
移动
窗口
的句柄 .参数
窗口
新左边, 整数型, 可空, 可空:原左边不变 .参数
窗口
新顶边, 整数型, 可空, 可空:原顶边不变 .参数
窗口
新宽度, 整数型, 可空, 可空:原宽度不变 .参数
窗口
新...
蒋勇自绘模块UI
子程序 开始动画, , 公开, 必须
先
保存源,在绘制下一个图形之前保存 .参数 帧数, 整数型, 可空, 默认15 .参数 间隔, 整数型, 可空, 默认15 .子程序 可视, 逻辑型, 公开, 48 .参数 是否可视, 逻辑型, 可空 .子程序 ...
《程序天下:JavaScript实例自学手册》光盘源码
12.11 在打开的
窗口
中
返回数据 12.12 创建弹出
窗口
12.13 不允许
窗口
出现滚动条 12.14 页面打开的同
时
打开另外两个
窗口
12.15 慢慢变大的
窗口
12.16 设置新打开的
窗口
为活动
窗口
12.17 页面随
窗口
的改变而改变 12.18...
程序天下:JavaScript实例自学手册
12.11 在打开的
窗口
中
返回数据 12.12 创建弹出
窗口
12.13 不允许
窗口
出现滚动条 12.14 页面打开的同
时
打开另外两个
窗口
12.15 慢慢变大的
窗口
12.16 设置新打开的
窗口
为活动
窗口
12.17 页面随
窗口
的改变而改变 12.18...
界面
15,979
社区成员
115,897
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章