
- •Оглавление
- •1 Простейшее Win32 приложение
- •2 Функция WinMain
- •3 Оконный класс
- •4 Стили класса, стили окна
- •5 Создание экземпляра оконного класса
- •6 Динамические изменения свойств оконного класса
- •7 Обработка сообщений
- •8 Программирование клавиатуры
- •9 Коды oem, ansii, asci, виртуальные коды клавиш
- •10 Символьные сообщения
- •11 Обработка сообщений от мыши
- •12 Программирование таймера
- •13 Диалоговые окна
- •14 Структура шаблона диалога
- •14(А) Ресурсы диалога
- •15 Функции создания диалога
- •16 Взаимодействие между элементами управления
- •17 Сообщения, SendMessage, SendDlgItemMessage
- •18 Обработка сообщений от элементов диалога
- •19 Элемент «Слайдер» (Румянцев - Азбука программирования в Win32 api, c.148)
- •20 Элемент ProgressBar (Румянцев - Азбука программирования в Win32 api, c.156)
- •21 Bios (общие сведения)
- •22 Файлы (общие сведения)
- •23 Создание файла (Win32 api)
- •24 Операции с файлом (Win32 api)
- •25 Организация файлов
- •26 Файловые системы (общие сведения)
- •Создание файла.
- •Удаление файла.
- •28 Структура логического диска под fat12 (wfat)
- •29 Каталоги в fat12
- •30 Алгоритм определения расположения файлов на диске
- •31 Ф.С. Fat32 (отличительные особенности)
- •32 Изменение элементов системных объектов при выполнении copy
- •33 Ntfs (общие сведения)
- •34 Запись файла в mft
- •35 Метафайлы
- •36 Атрибуты записи файла
- •37 Изменение системных данных при выполнении copy
- •38 Изменение системных данных при выполнении del
- •39 Изменение системных данных при выполнении move
- •40 Процессы. Потоки. Общие сведения
- •41 Модель процесса
- •42 Контекст процесса
- •43 Дескриптор процесса
- •44 Создание процесса (общие сведения)
- •45 Окончание процесса (общие сведения)
- •46 Состояния процесса
- •47 Уровни планирования процессов
- •48 Диспетчеризация процессов
- •49 Класс приоритета процесса
- •50 Создание процесса (Win32 api)
- •51 Win32 Api. Управление процессами
- •52 Win32 Api. Окончание процесса
- •53 Среда процесса
- •54 Командная строка процесса
- •55 Наследование дочерними процессами ресурсов родителя
- •56 Список процессов
- •57 Время выполнения процесса
20 Элемент 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;
}
Рис.
Диалоговое окно со спином и индикатором