c语言文本进度条,进度条

#include

#include //InitCommonControls

//过程函数的返回值都是LRESULT,类型都是CALLBACK

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow)

{

HWND hwnd; //主窗口句柄,在CreateWindow中赋值

MSG msg; //消息变量,在GetMessage中使用

WNDCLASS wndclass; //窗口类

TCHAR* szAppName = TEXT("ProgressBar"); //类名和窗口名

wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景

wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //鼠标

wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //图标

wndclass.lpszClassName = szAppName; //类名

wndclass.cbClsExtra = 0; //类的额外参数

wndclass.cbWndExtra = 0; //窗口的额外参数.用于基于同一窗口类的窗口各自区分.

//在自定义对话框类时必须指定为DLGWINDOWEXTRA的大小

wndclass.lpszMenuName = NULL; //菜单名.可以用作子窗口的id

wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口风格

wndclass.lpfnWndProc = WndProc; //窗口过程

wndclass.hInstance = hInstance; //包含窗口过程的实例句柄

if( !RegisterClass(&wndclass) ) //注册窗口类

return 0;

hwnd = CreateWindow( //创建窗口

szAppName, //窗口类名

szAppName, //窗口标题

WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, //窗口风格

CW_USEDEFAULT, //初始的x坐标

CW_USEDEFAULT, //初始的y坐标

480, //初始的宽度

200, //初始的高度

NULL, //父窗口

NULL, //菜单

hInstance, //和窗口相关的实例句柄

NULL //额外参数

);

ShowWindow( hwnd,nCmdShow ); //显示窗口

UpdateWindow( hwnd ); //更新窗口

while( GetMessage(&msg,NULL,0,0) ) //消息循环

{

TranslateMessage(&msg); //将WM_XXXKEYXXX消息翻译为WM_CHAR消息

DispatchMessage(&msg); //传递消息到窗口过程

}

return msg.wParam; //返回

}

DWORD WINAPI PBThreadProc( LPVOID lpParameter )

{

HWND hwndPB = (HWND) lpParameter; //进度条的窗口句柄

PBRANGE range; //进度条的范围

SendMessage( hwndPB, PBM_SETRANGE, //设置进度条的范围

(WPARAM)0, (LPARAM)(MAKELPARAM(0,100)) );

SendMessage( hwndPB, PBM_GETRANGE, //获取进度条的范围

(WPARAM)TRUE, //TRUE 表示返回值为范围的最小值,FALSE表示返回最大值

(LPARAM)&range );

while(TRUE)

{

SendMessage( hwndPB, PBM_DELTAPOS, //设置进度条的新位置为当前位置加上范围的1/40

(WPARAM)((range.iHigh-range.iLow)/40), (LPARAM)0 );

if( SendMessage( hwndPB, PBM_GETPOS, (WPARAM)0, (LPARAM)0 ) //取得进度条当前位置

== range.iHigh )

{

SendMessage( hwndPB, PBM_SETPOS, (WPARAM)range.iLow, (LPARAM)0 ); //将进度条复位

}

Sleep(1000); //每1秒更新一次进度条

}

}

LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )

{

static HWND hwndPB;

switch( message )

{

case WM_CREATE:

{

InitCommonControls(); //确保已注册了进度条类PROGRESS_CLASS

hwndPB = CreateWindowEx(

0,

PROGRESS_CLASS,

NULL,

WS_CHILD | WS_VISIBLE,

0,0,0,0, //位置和大小在WM_SIZE中设置

hwnd,

(HMENU)0,

((LPCREATESTRUCT)lParam)->hInstance,

NULL);

CreateThread( //操作进度条的线程

NULL,

0,

(LPTHREAD_START_ROUTINE)PBThreadProc,

hwndPB,

0,

0

);

return 0;

}

case WM_SIZE:

{

RECT rc;

GetClientRect(hwnd, &rc);

MoveWindow(

hwndPB,

rc.left,

(rc.bottom - rc.top )/4,

rc.right - rc.left,

(rc.bottom - rc.top )/10,

TRUE

);

return 0;

}

case WM_DESTROY:

PostQuitMessage(0);

return 0;

}

return DefWindowProc( hwnd,message,wParam,lParam );

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值