孙鑫 第九课之四 进度栏编程笔记

时间:2022-04-10 21:50:57

1 创建进度栏

BOOL    Create  (

DWOR?D dwStyle,  //样式   PBS_VERTICAL(一格一格的样式) , SMOOTH(平滑的样式) , 还有另外的window styles

const   RECT   &rect, //位置  大小

CWnd  *pParentWnd, //父窗口指针  如果进度栏放在一个任务栏窗格上,那么指针为该任务栏,进度栏的创建一定要在其父窗口创建完毕后再创建

UINT   nID     //该进度栏ID

);

eg.

CProgressCtrl   progressBar;

CRrect rect(50, 50, 

progressBar.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH   /*平滑的*/,  rect, &statusBar /* 工具栏*/, ID_XXX);


2 设置两端范围

CProgressCtrl::SetRange

默认为0——100

void   SetRange( short   nLower,  short   nUpper);

void  SetRange32( int   nLower, int   nUpper);

 eg.

progressBar.SetRange(0, 100);

 

 3 设置步长

?CProgressCtrl::SetStep

int    SetStep(int   nStep);

eg.

progressBar.SetStep(2);  //设置每次进度2

4 进度变化

CProgressCtrl::StepIt

int    St?epIt();

eg.

progressBar.StepIt(); //进度前进

5 设置进度栏进度在某个位置

CProgressCtrl::SetPos

int  SetPos(int   nPos);

eg.

progressBar.SetPos(55); //使进度栏到55位置

 



6 注意的问题

在实际使用的时候应该考虑到窗口重绘的问题,不能引起进度栏位置出错。如果进度栏的位置是放在一个控件之上,进度栏的坐标根据此控件位置确定, 那么应该注意:进度栏位置应该随着其父窗口变化而变化。

例如:进度栏放在状态栏某窗格之上,那么窗口重绘时, 应该重新取到窗格位置,调用MoveWindow() 或 SetWindowPos()函数重新放置进度栏。

CWnd::MoveWindow

void      MoveWindow(int     x,int    y,int    nWidth,   int   nHeight,  BOOL   bRepaint=TRUE);

void    MoveWindow(LPCRECT   lpRect,  BOOL   bRepaint = TRUE);

eg.

CRect rect(100, 150, 300, 180);

progressBar.MoveWindow(&rect);   //移动进度栏到rect位置


一般情况下是把创建和随时改变进度栏的位置写到PAINT函数里,该函数会随着窗口重绘调用,也就能实时改变进度栏位置。




孙鑫 第九课之四 进度栏编程笔记?