用Win32 实现进度条

转载:http://www.cctry.com/thread-238862-1-1.html

  1     #include <windows.h>
  2     #include <commctrl.h>        //InitCommonControls
  3     #pragma comment(lib, "comctl32") //InitCommonControls
  4     //过程函数的返回值都是LRESULT,类型都是CALLBACK
  5     LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
  6     int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow)
  7     {
  8         HWND hwnd;        //主窗口句柄,在CreateWindow中赋值
  9         MSG msg;        //消息变量,在GetMessage中使用
 10         WNDCLASS wndclass;        //窗口类
 11         TCHAR* szAppName = TEXT("ProgressBar");    //类名和窗口名
 12         wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    //窗口背景
 13         wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);        //鼠标
 14         wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);    //图标
 15         wndclass.lpszClassName = szAppName;        //类名
 16         wndclass.cbClsExtra = 0;        //类的额外参数
 17         wndclass.cbWndExtra = 0;        //窗口的额外参数.用于基于同一窗口类的窗口各自区分.
 18                                         //在自定义对话框类时必须指定为DLGWINDOWEXTRA的大小
 19         wndclass.lpszMenuName = NULL;    //菜单名.可以用作子窗口的id
 20         wndclass.style = CS_HREDRAW | CS_VREDRAW;    //窗口风格
 21         wndclass.lpfnWndProc = WndProc;        //窗口过程
 22         wndclass.hInstance = hInstance;        //包含窗口过程的实例句柄
 23
 24         if( !RegisterClass(&wndclass) )        //注册窗口类
 25             return 0;
 26         hwnd = CreateWindow(                //创建窗口
 27                     szAppName,                //窗口类名
 28                     szAppName,                //窗口标题
 29                     WS_OVERLAPPEDWINDOW,    //窗口风格
 30                     CW_USEDEFAULT,            //初始的x坐标
 31                     CW_USEDEFAULT,            //初始的y坐标
 32                     CW_USEDEFAULT,            //初始的宽度
 33                     CW_USEDEFAULT,            //初始的高度
 34                     NULL,                    //父窗口
 35                     NULL,                    //菜单
 36                     hInstance,                //和窗口相关的实例句柄
 37                     NULL                    //额外参数
 38                     );
 39         ShowWindow( hwnd,nCmdShow );        //显示窗口
 40         UpdateWindow( hwnd );                //更新窗口
 41         while( GetMessage(&msg,NULL,0,0) )    //消息循环
 42         {
 43             TranslateMessage(&msg);            //将WM_XXXKEYXXX消息翻译为WM_CHAR消息
 44             DispatchMessage(&msg);            //传递消息到窗口过程
 45         }
 46         return msg.wParam;                    //返回
 47     }
 48
 49     DWORD WINAPI PBThreadProc( LPVOID lpParameter )
 50     {
 51         HWND hwndPB = (HWND) lpParameter;    //进度条的窗口句柄
 52         PBRANGE range;                        //进度条的范围
 53
 54         SendMessage( hwndPB, PBM_SETRANGE,    //设置进度条的范围
 55             (WPARAM)0, (LPARAM)(MAKELPARAM(0,100)) );
 56
 57         SendMessage( hwndPB, PBM_GETRANGE,    //获取进度条的范围
 58             (WPARAM)TRUE,                    //TRUE 表示返回值为范围的最小值,FALSE表示返回最大值
 59             (LPARAM)&range );
 60
 61         while(TRUE)
 62         {
 63             SendMessage( hwndPB, PBM_DELTAPOS, //设置进度条的新位置为当前位置加上范围的1/20
 64                 (WPARAM)((range.iHigh-range.iLow)/20), (LPARAM)0 );
 65             if( SendMessage( hwndPB, PBM_GETPOS, (WPARAM)0, (LPARAM)0 ) //取得进度条当前位置
 66                  == range.iHigh )
 67             {
 68                 SendMessage( hwndPB, PBM_SETPOS, (WPARAM)range.iLow, (LPARAM)0 ); //将进度条复位
 69             }
 70             Sleep(1000);
 71         }
 72     }
 73
 74
 75     LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
 76     {
 77         static HWND hwndPB;
 78         switch( message )
 79         {
 80         case WM_CREATE:
 81             {
 82                 InitCommonControls(); //确保已注册了进度条类PROGRESS_CLASS
 83                 hwndPB = CreateWindowEx(
 84                     0,
 85                     PROGRESS_CLASS,
 86                     NULL,
 87                     WS_CHILD | WS_VISIBLE,
 88                     0,0,0,0,            //位置和大小在WM_SIZE中设置
 89                     hwnd,
 90                     (HMENU)0,
 91                     ((LPCREATESTRUCT)lParam)->hInstance,
 92                     NULL);
 93                 CreateThread(            //操作进度条的线程
 94                     NULL,
 95                     0,
 96                     (LPTHREAD_START_ROUTINE)PBThreadProc,
 97                     hwndPB,
 98                     0,
 99                     0
100                     );
101                 return 0;
102             }
103         case WM_SIZE:
104             {
105                 RECT rc;
106                 GetClientRect(hwnd, &rc);
107                 MoveWindow(
108                     hwndPB,
109                     rc.left,
110                     (rc.bottom - rc.top )/4,
111                     rc.right - rc.left,
112                     (rc.bottom - rc.top )/10,
113                     TRUE
114                     );
115                 return 0;
116             }
117         case WM_DESTROY:
118             PostQuitMessage(0);
119             return 0;
120         }
121         return DefWindowProc( hwnd,message,wParam,lParam );
122     }
时间: 2024-11-07 00:03:27

用Win32 实现进度条的相关文章

进度条控件CProgressCtrl实现进度滚动效果

关于CProgressCtrl 控件的基本操作网上有很多资料,可我想实现进度条中进度滚动效果,即很多时候程序出现的等待或启动画面,如下图: 实现这个效果的函数为SetMarquee(_In_ BOOL fMarqueeMode, _In_ int nInterval),第一个参数为开关,第二个参数指定滚动时间.且控件应该包含 PBS_MARQUEE风格,eg:m_ProgressCtl.Create(WS_CHILD|WS_VISIBLE|PBS_MARQUEE,CRect(100,200,25

Android 从无到有打造一个炫酷的进度条效果

从无到有打造一个炫酷的进度条效果

每周进度条(第十五周)

第十五周进度条   第十五周 所花时间 1h 代码量(行)  100 博客量(篇)  1 学到的知识 对图片的处理 在Android程序中加入图片

Bootstrap进度条

Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前的版本和旧版的 Firefox 不支持该特性, Opera 12 不支持动画. 默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class .progress-bar 的空的 <div>. 添加一个带有百分比表示的宽度的 style 属性,例如 sty

HTML5/CSS3超酷进度条 不同进度多种颜色

下面我们来看看实现这款进度条的过程和源码,代码主要由HTML.CSS以及jQuery组成,实现过程也相对比较简单.HTML代码: <div id="wrapper">     <div class="loader-container">           <div class="meter">0</div>           <span class="runner"&g

基于HT for Web矢量实现HTML5文件上传进度条

在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件上传进度条,矢量在<矢量Chart图表嵌入HTML5网络拓扑图的应用>一文中已经讲述了关于setCompType()方法的应用,今天我们用setImage()方法充分利用系统中定义好的矢量资源来实现文件上传进度条,我们先来看下效果图: 从效果图可以看到,向服务器上传了一个mp4文件,并在最下方显示

Android的下拉刷新带进度条效果

首先看一下运行效果图,程序的下拉刷新参考了视频,在视频页面也提供了源码下载, http://www.imooc.com/learn/135 本篇主要说在此基础上增加了进度条的快速旋转和递增递减处理,在文章最后也会给出源码,这里主要描述一下所用的一个类 RoundProgressBar package com.cayden.listview; import android.content.Context; import android.content.res.TypedArray; import

【WebView】带加载进度条的WebView及Chrome联调

先看效果图: 看到顶部蓝色的进度条了. 原理:用到了 android.webkit.WebChromeClient中的onProgressChanged,而android.webkit.WebViewClient是没有这个方法的.所以普通的WebView是无法实现进度条的. 下面直接上干货: /** * ProgressWebView * * @author lif * * */ @SuppressWarnings("deprecation") public class Progres

OpenCV GUI基本操作,回调函数,进度条,裁剪图像等

代码为转载,出处找不到了,不贴了 工具条进度条: // ConvertColor.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #pragma comment(lib,"opencv_core2410d.l