По своему внешнему виду это, наверное, самый простой из общих элементов управления. То же самое можно сказать и о работе с ним. У него только один стиль, и всего пять сообщений применяются для управления им.
Как и в случае трекбара, специальной функции для создания индикатора нет. Для создания индикатора необходимо использовать функцию CreateWindow() или CreateWindowEx(). Для указания имени класса необходимо использовать макрос PROGRESS_CLASS.
Для управления индикатором используются сообщения, начинающиеся на PBM_ (PBM_SETRANGE, PBMSETPOS, PBMDELTAPOS, PBMSETSTEP и т.д.)
#include <windows.h>
#include <commctrl.h>
#include "ProgressBar.h"
HINSTANCE hlnst;
LRESULT CALLBACK ProgressBarWndProc (HWND, UINT, UINT, LONG);
BOOL CALLBACK ProgressBarDialogProc(HWND. UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hlnstance, HINSTANCE hPrevInstance, LPSTR IpszCrodParam, int nCmdShow)
{
HWND hWnd;
WNDCLASS WndCIass;
MSG Msg;
charszClassName[] = "ProgressBarDemo";
hlnst = hlnstance;
/* Registering our window ctass */
/* Fill WNDCLASS structure */
WndClass.slyle = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = ProgressBarWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hlnstance = hlnstance;
WndClass.hlcon = Loadlcon (NULL,IDl_APPLICATION);
WndClass.hCursor = LoadCursor (NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH) GctStockObjeci (WHITE_BRUSH);
|
|
WndClass.lpszMenuName = "ProgressBarMenu";
WndClass.lpszClassName = szClassName;
if(!RegisterClass(&WndCIass))
{
MessageBox(NULL,"Cannot register class VEnot",MB_01C);
return 0;
}
hWnd = CreateWindow(szClassName, "Progressbar Demonstration Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hlnstance, NULL);
if(!hWnd)
{
MessageBox(NULL,"Cannot create window'\HError,\MB_OK); return 0;
}
/* Show our window */
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
/* Beginning of messages cycle */
while(GetMessage(&Msg, NULL, 0,0))
TransIateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK ProgressBarWndProc (HWND hWnd, UINT Message, UINT wParam, LONG IParam)
{
switch(Message)
{ case WM_COMMAND:
switch(LOWORD(wParam))
{
case lDM_Dialog:
DialogBox(hInst, "ProgrcssBarDialog", hWnd, ProgressBarDialogProc);
break;
case IDMExit:
SendMessagefhWnd, WM_CLOSE, 0,0);
break;
}
return 0;
caseWM_DESTROY:
PoslQuitMessage(0);
return 0;
}
return DefWtndowProc(hWnd,Message,wParam,lParam);
}
BOOL CALLBACK ProgressBarDialogProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM IParam)
{
static HWND hEditWnd;
static HWND hSpinWnd;
static HWND hProgressBarWnd;
int i;
switch(Message)
{
case WM_INITDIALOC:
hEditWnd = GetDlgItem(hDlg, ID_Edit);
hSpinWnd = CrcateUpDownControl(WS_CHILD | WS BORDER (ws_visible| uds_setbuddyint | udsjvlignright, 0,12.50,50, hDIg, ID_Spin, hlnst, hEditWnd, 10, 0,5);
hProgressBarWnd = CreateWindow(PROGRESS_CLASS, "ProgrcssBarDemo", WS CHILD | WS_VISIBLE, 10,75,130,20, hDIg, NULL, hlnst, NULL); ScndMcssage(hProgressBarWnd, PBM_SETRANGE, 0,M AKELP ARAM(0,10));
SendMessagc(hProgressBarWnd, PBM_SETSTEP, 1,0);
SendMcssagc(hProgressBarWnd, PBM_SETPOS, 5,0);
return TRUE;
caseWM_VSCROLL:
SendMessage(hProgressBarWnd, PBM_SETPOS, GetDlgTtemInt(hDlg, ID_Edit,NULL,l),0); return TRUE;
caseWM COMMAND:
switch<LOWORD(wParam))
{
case ID_OK: EndDialog(hD1g,0);
return TRUE;
}
break;
}
return FALSE;
}
Рис. Диалоговое окно со спином и индикатором