MSDN地址:
http://msdn.microsoft.com/en-us/library/bb760818(v=vs.85)
PBS_VERTICAL 垂直
用CreateWindowEx创建 类id: PROGRESS_CLASS 或类名: "msctls_progress32"
用消息PBM_SETRANGE设置范围,如果没有设置进度条范围,默认是 0 ~ 100
PBM_SETPOS设置当前位置
PBM_DELTAPOS在当前位置上加上一个值
PBM_SETSTEP设置增加的步长, 以后每次发送PBM_STEPIT消息, 当前位置就增加步长,默认步长是10
进度条结构
typedef struct {
int iLow;
int iHigh;
} PBRANGE, *PPBRANGE;
进度条范围,在PBM_GETRANGE消息中使用
进度条的窗口过程中处理的消息
WM_CREATE 分配和初始化一些结构
WM_DESTROY 释放和进度条相关的资源
WM_ERASEBKGND 绘制进图条背景和边框
WM_GETFONT 返回当前字体句柄,目前进度条并不绘制文本,所以发送该消息没有效果
WM_PAINT 绘制进度条:如果wParam非NULL, 控件认为该值是HDC并用该hdc绘制进度条
WM_SETFONT 保存新字体句柄并返回旧字体句柄,目前进度条并不绘制文本,所以发送该消息没有效果
进度条消息
PBM_DELTAPOS 在当前位置上加上一个值,绘制进度条的新位置(返回值是原位置的值)
wParam - 要增加的值
wParam - 必须是0
wParam - 必须是0
wParam - 必须是0
wParam - 是否返回下限. TRUE返回下限 FALSE返回上限
wParam - 必须是0
wParam - 必须是0
wParam - 必须是0
wParam - 必须是0
wParam - 有符号整数,要设置的新位置值
wParam - 必须是0
wParam - 下限
wParam - 步长
wParam - 必须是0
进度条风格 Progress Bar Style
PBS_SMOOTH 平滑PBS_VERTICAL 垂直
用CreateWindowEx创建 类id: PROGRESS_CLASS 或类名: "msctls_progress32"
用消息PBM_SETRANGE设置范围,如果没有设置进度条范围,默认是 0 ~ 100
PBM_SETPOS设置当前位置
PBM_DELTAPOS在当前位置上加上一个值
PBM_SETSTEP设置增加的步长, 以后每次发送PBM_STEPIT消息, 当前位置就增加步长,默认步长是10
进度条结构
typedef struct {
int iLow;
int iHigh;
} PBRANGE, *PPBRANGE;
进度条范围,在PBM_GETRANGE消息中使用
进度条的窗口过程中处理的消息
WM_CREATE 分配和初始化一些结构
WM_DESTROY 释放和进度条相关的资源
WM_ERASEBKGND 绘制进图条背景和边框
WM_GETFONT 返回当前字体句柄,目前进度条并不绘制文本,所以发送该消息没有效果
WM_PAINT 绘制进度条:如果wParam非NULL, 控件认为该值是HDC并用该hdc绘制进度条
WM_SETFONT 保存新字体句柄并返回旧字体句柄,目前进度条并不绘制文本,所以发送该消息没有效果
进度条消息
PBM_DELTAPOS 在当前位置上加上一个值,绘制进度条的新位置(返回值是原位置的值)
wParam - 要增加的值
lParam - 必须是0
wParam - 必须是0
lParam - 必须是0
wParam - 必须是0
lParam - 必须是0
wParam - 必须是0
lParam - 必须是0
wParam - 是否返回下限. TRUE返回下限 FALSE返回上限
lParam - 指向PBRANGE结构的指针,用来接受范围(上限和下限都接受),可以是NULL
wParam - 必须是0
lParam - 必须是0
wParam - 必须是0
lParam - 必须是0
wParam - 必须是0
lParam - COLORREF类型的颜色值,也可以是CLR_DEFAULT表示使用默认值
wParam - 必须是0
lParam - COLORREF类型的颜色值,也可以是CLR_DEFAULT表示使用默认值
wParam - 有符号整数,要设置的新位置值
lParam - 必须是0
wParam - 必须是0
lParam - 进度条新范围值,低位是下限,高位是上限
wParam - 下限
lParam - 上限
(vista)PBM_SETSTATE
wParam - 步长
lParam - 必须是0
wParam - 必须是0
lParam - 必须是0
示例
// ParseALargeFile - parses a large file and uses a progress bar to
// indicate the progress of the parsing operation.
// Returns TRUE if successful, or FALSE otherwise.
// hwndParent - parent window of the progress bar.
// lpszFileName - name of the file to parse.
//
// Global variable
// g_hinst - instance handle
extern HINSTANCE g_hinst;
BOOL ParseALargeFile(HWND hwndParent, LPSTR lpszFileName)
{
RECT rcClient; // client area of parent window
int cyVScroll; // height of scroll bar arrow
HWND hwndPB; // handle of progress bar
HANDLE hFile; // handle of file
DWORD cb; // size of file and count of bytes read
LPCH pch; // address of data read from file
LPCH pchTmp; // temporary pointer
// Ensure that the common control DLL is loaded and create a
// progress bar along the bottom of the client area of the
// parent window. Base the height of the progress bar on
// the height of a scroll bar arrow.
InitCommonControls();
GetClientRect(hwndParent, &rcClient);
cyVScroll = GetSystemMetrics(SM_CYVSCROLL);
hwndPB = CreateWindowEx(0, PROGRESS_CLASS, (LPSTR) NULL,
WS_CHILD | WS_VISIBLE, rcClient.left,
rcClient.bottom - cyVScroll,
rcClient.right, cyVScroll,
hwndParent, (HMENU) 0, g_hinst, NULL);
// Open the file for reading, and retrieve the size of the file.
hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
if (hFile == (HANDLE) INVALID_HANDLE_VALUE)
return FALSE;
cb = GetFileSize(hFile, (LPDWORD) NULL);
// Set the range and increment of the progress bar.
SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, cb / 2048));
SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0);
// Parse the file.
pch = (LPCH) LocalAlloc(LPTR, sizeof(char) * 2048);
pchTmp = pch;
do {
ReadFile(hFile, pchTmp, sizeof(char) * 2048, &cb,
(LPOVERLAPPED) NULL);
.
. // Include here any code that parses the file.
.
// Advance the current position of the progress bar
// by the increment.
SendMessage(hwndPB, PBM_STEPIT, 0, 0);
} while (cb);
CloseHandle((HANDLE) hFile);
DestroyWindow(hwndPB);
return TRUE;
}