Элемент ProgressBar (Румянцев - Азбука программирования в Win32 API, c.156)

По своему внешнему виду это, наверное, самый простой из общих элементов управления. То же самое можно сказать и о работе с ним. У него только один стиль, и всего пять сообщений применяются для управ­ления им.

Как и в случае трекбара, специальной функции для создания индика­тора нет. Для создания индикатора необходимо использовать функцию 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;

}

Рис. Диалоговое окно со спином и индикатором


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: