进度条简明基础(Progress Bar)

MSDN地址:  http://msdn.microsoft.com/en-us/library/bb760818(v=vs.85)

进度条风格 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


PBM_GETBARCOLOR 返回进度条颜色, 该颜色值由PBM_SETBARCOLOR设置,默认是CLR_DEFAULT(commctrl.h)
wParam - 必须是0

lParam - 必须是0


PBM_GETBKCOLOR 返回进度条背景颜色, 该颜色值由PBM_SETBKCOLOR设置,默认是CLR_DEFAULT(commctrl.h)
wParam - 必须是0

lParam - 必须是0


PBM_GETPOS 返回当前位置(无符号整型UINT)
wParam - 必须是0

lParam - 必须是0


PBM_GETRANGE 返回进度条范围上限或下限(有符号整型INT)
wParam - 是否返回下限. TRUE返回下限  FALSE返回上限

lParam - 指向PBRANGE结构的指针,用来接受范围(上限和下限都接受),可以是NULL


(vista)PBM_GETSTATE 返回进度条状态  PBST_NORMAL正常进度   PBST_ERROR出错   PBST_PAUSED暂停
wParam - 必须是0

lParam - 必须是0


(vista)PBM_GETSTEP 返回进度条步增,由PBM_SETSTEP设置,默认10
wParam - 必须是0

lParam - 必须是0


PBM_SETBARCOLOR 设置进度条滑块颜色(返回旧颜色值或者 CLR_DEFAULT表示旧颜色是默认颜色)
wParam - 必须是0

lParam - COLORREF类型的颜色值,也可以是CLR_DEFAULT表示使用默认值


PBM_SETBKCOLOR 设置进度条背景颜色(返回旧颜色值或者 CLR_DEFAULT表示旧颜色是默认颜色)
wParam - 必须是0

lParam - COLORREF类型的颜色值,也可以是CLR_DEFAULT表示使用默认值


PBM_SETPOS 设置进度条新位置,绘制进度条的新位置(返回值是原位置的值)
wParam - 有符号整数,要设置的新位置值

lParam - 必须是0


PBM_SETRANGE 设置进度条范围并重新绘制进度条来反映新范围(成功返回旧范围否则返回0)
wParam - 必须是0

lParam - 进度条新范围值,低位是下限,高位是上限


PBM_SETRANGE32 用32位值设置进度条范围并重新绘制进度条来反映新范围(成功返回旧范围)
wParam - 下限

lParam - 上限


(vista)PBM_SETSTATE


PBM_SETSTEP 设置步长,默认步长是10(返回旧步长)
wParam - 步长

lParam - 必须是0


PBM_STEPIT 在当前位置上加上步长并重新绘制新位置
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; 
} 



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值