进度条的使用 int i=0;while(n<100000){ i++;}用进度条实时显示循环进行的长度,求大神指教!进度条ProgressBar 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int nMin;int nMax;CProgressCtrl::GetRange(nMin,nMax);for(int i=nMin;i<nMax;i++){ CProgressCtrl::SetPos(i); DoEvents(); Sleep(50);}//DoEvents 会将控制权传给操作系统。//可以让程序在执行操作的同时仍可以处理其他事件,用这个方法可以有效地解决画面无法刷新的问题。void DoEvents(){ MSG msg; while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { DispatchMessage(&msg); TranslateMessage(&msg); } } CProgressCtrl::SetPos(i * 100 / nMax); int nRange=g_fileLength/20-5; //nRange非常大例如:2200050,只会更大,求得是条数 int nPostion=g_intmap/nRange*100; m_ctrlProgress.SetRange(0,100); while (fp.ReadString(nstrData)) { if (nstrData.GetLength()>20) { g_delete=nstrData.GetLength(); continue; } if(!g_mapCatch.insert(nstrData).second) { m_ctrlList.AddString(nstrData); WriteTxt(nstrData); } g_intmap++; m_ctrlProgress.SetPos(nPostion); DoEvent(); }每条读出来以后,进度条相映应该怎样的变化? //文件名:MyStatusBar.cpp CMyStatusBar类的实现文件//文件名:MyStatusBar.h CMyStatusBar类的头文件#pragma onceclass CMyStatusBar : public CStatusBar{ DECLARE_DYNAMIC(CMyStatusBar) CProgressCtrl m_MyProgressCtrl;public: CMyStatusBar(); virtual ~CMyStatusBar(); CProgressCtrl &GetProgressCtrl(){return m_MyProgressCtrl;};protected: DECLARE_MESSAGE_MAP()public: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSize(UINT nType, int cx, int cy);};//cpp文件#include "stdafx.h"#include "Test.h"#include "MyStatusBar.h"IMPLEMENT_DYNAMIC(CMyStatusBar, CStatusBar)CMyStatusBar::CMyStatusBar(){}CMyStatusBar::~CMyStatusBar(){}BEGIN_MESSAGE_MAP(CMyStatusBar, CStatusBar) ON_WM_CREATE() ON_WM_SIZE()END_MESSAGE_MAP()int CMyStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CStatusBar::OnCreate(lpCreateStruct) == -1) return -1; CRect rect(0,0,0,0); m_MyProgressCtrl.Create(WS_CHILD|WS_VISIBLE,rect,this,IDC_MYPROGRESS); return 0;}void CMyStatusBar::OnSize(UINT nType, int cx, int cy){ CStatusBar::OnSize(nType, cx, cy); UINT inx; CRect rect; inx=CommandToIndex(ID_INDICATOR_MYPROGRESS); GetItemRect(inx,&rect); m_MyProgressCtrl.MoveWindow(rect); }使用void CMainFrame::OnTimer(UINT nIDEvent){ int nLower,nUpper; m_wndStatusBar.m_MyProgressCtrl.GetRange(nLower,nUpper); if(m_Pos>=nUpper) m_Pos=0; m_wndStatusBar.m_MyProgressCtrl.SetPos(m_Pos); m_Pos+=2; CFrameWnd::OnTimer(nIDEvent);} 调查:有多少人在用WTL? 大清早问个问题 CListCtrl 设置成report,如何给Column字段栏贴图? VC学习群:24903647 外网如何连接内网 建立工程时没有选ActiveX, 现在如何把它加上去?? 转分! 一个长久以来悬而未决的问题!! 仍是关于代理服务器编程的 请问各位谁知道vc的dll之间能不能传递消息啊,如果能怎么做呢 套接字与完成端口模型关联后,套接字模式会变改变吗? wsasocket 创建套接字后, 与完成端口关联, 用createiocompletionport 串口输入缓存大小设定及读取问题
int nMax;
CProgressCtrl::GetRange(nMin,nMax);
for(int i=nMin;i<nMax;i++)
{
CProgressCtrl::SetPos(i);
DoEvents();
Sleep(50);
}
//DoEvents 会将控制权传给操作系统。
//可以让程序在执行操作的同时仍可以处理其他事件,用这个方法可以有效地解决画面无法刷新的问题。
void DoEvents()
{
MSG msg;
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
DispatchMessage(&msg);
TranslateMessage(&msg);
}
}
int nPostion=g_intmap/nRange*100;
m_ctrlProgress.SetRange(0,100);
while (fp.ReadString(nstrData))
{
if (nstrData.GetLength()>20)
{
g_delete=nstrData.GetLength();
continue;
} if(!g_mapCatch.insert(nstrData).second)
{
m_ctrlList.AddString(nstrData);
WriteTxt(nstrData);
}
g_intmap++;
m_ctrlProgress.SetPos(nPostion);
DoEvent();
}
每条读出来以后,进度条相映应该怎样的变化?
#pragma once
class CMyStatusBar : public CStatusBar
{
DECLARE_DYNAMIC(CMyStatusBar)
CProgressCtrl m_MyProgressCtrl;
public:
CMyStatusBar();
virtual ~CMyStatusBar();
CProgressCtrl &GetProgressCtrl(){return m_MyProgressCtrl;};
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
};//cpp文件
#include "stdafx.h"
#include "Test.h"
#include "MyStatusBar.h"
IMPLEMENT_DYNAMIC(CMyStatusBar, CStatusBar)
CMyStatusBar::CMyStatusBar()
{
}
CMyStatusBar::~CMyStatusBar()
{
}
BEGIN_MESSAGE_MAP(CMyStatusBar, CStatusBar)
ON_WM_CREATE()
ON_WM_SIZE()
END_MESSAGE_MAP()
int CMyStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CStatusBar::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rect(0,0,0,0);
m_MyProgressCtrl.Create(WS_CHILD|WS_VISIBLE,rect,this,IDC_MYPROGRESS);
return 0;
}void CMyStatusBar::OnSize(UINT nType, int cx, int cy)
{
CStatusBar::OnSize(nType, cx, cy);
UINT inx;
CRect rect;
inx=CommandToIndex(ID_INDICATOR_MYPROGRESS);
GetItemRect(inx,&rect);
m_MyProgressCtrl.MoveWindow(rect);
}使用void CMainFrame::OnTimer(UINT nIDEvent)
{
int nLower,nUpper;
m_wndStatusBar.m_MyProgressCtrl.GetRange(nLower,nUpper);
if(m_Pos>=nUpper)
m_Pos=0;
m_wndStatusBar.m_MyProgressCtrl.SetPos(m_Pos);
m_Pos+=2;
CFrameWnd::OnTimer(nIDEvent);
}