API и FreeBasic. (дочерние окна-Progress Bar)
Это довольно простой для реализации контрол, сама цель которого визуально отображать статистику вывода какой-либо операции. Представляет из себя нечисловую приблизительную линейную шкалу. Живой пример - операция копирования в проводнике windows. Сам контрол ничем не управляет и может принимать 16 сообщений:
- PBM_DELTAPOS - Перемещает текущую позицию прогресс бара на указанное приращение и перерисовывает панель, чтобы отразить новую позицию.
- PBM_GETBARCOLOR - Получает цвет шкалы прогресс-бара
- PBM_GETBKCOLOR - Получает цвет фона прогресс-бара
- PBM_GETPOS - Возвращает текущую позицию прогресс-бара
- PBM_GETRANGE - Получает информацию о диапазоне прогресс-бара (начальный и конечный)
- PBM_GETSTATE - Получает состояние прогресс-бара (PBST_NORMAL,PBST_ERROR,PBST_PAUSED)
- PBM_GETSTEP - Получает шаг приращения прогресс-бара. Шаг приращения суммы увеличивает индикатор текущей позиции всякий раз, когда он получает сообщение PBM_STEPIT. По умолчанию, шаг приращения равен 10
- PBM_SETBARCOLOR - Устанавливает цвет шкалы прогресс-бара
- PBM_SETBKCOLOR - Устанавливает цвет фона прогресс-бара
- PBM_SETMARQUEE - Установка в анимацию ожидающего режима
- PBM_SETPOS - Устанавливает текущее положение индикатора и перерисовывает панель, чтобы отразить новую позицию
- PBM_SETRANGE - Устанавливает минимальное и максимальное значения диапазона для индикатора и перерисовывает панель, чтобы отразить новый диапазон
- PBM_SETRANGE32 - Устанавливает минимальное и максимальное значения для индикатора для 32-битных значений, и перерисовывает панель, чтобы отразить новый диапазон
- PBM_SETSTATE - Устанавливает состояние прогресс-бара (PBST_NORMAL,PBST_ERROR,PBST_PAUSED)
- PBM_SETSTEP - Задает шаг приращения для прогресс-бара. Шаг приращения суммы увеличивает индикатор текущей позиции всякий раз, когда он получает сообщение PBM_STEPIT. По умолчанию, шаг приращения равен 10
- PBM_STEPIT - Перемещает текущую позицию для индикатора на приращение шага и перерисовывает панель, чтобы отразить новую позицию
Создается контрол функцией CreateWindowEx и классом msctls_progress32. Для контрола можно использовать 4 визуальных стиля:
- PBS_MARQUEE - подключает анимацию ожидания (отображается как непрерывное движение). Для приложения должен быть подключен Manifests в ресурсах
- PBS_SMOOTH - сглаженная шкала без разделения
- PBS_SMOOTHREVERSE - сглаженная шкала без разделения, двигается в обратном положении от большого к маленькому (у меня почему не работает этот стиль)
- PBS_VERTICAL - вертикальное отображение
И собственно пример:
Progress.bas
#INCLUDE "windows.bi" #INCLUDE "win/commctrl.bi" #DEFINE PBS_MARQUEE 8 Dim msg As MSG Dim As WNDCLASSEX wc Dim As String NameClass="MyClass" Dim As HINSTANCE Hinst=GetModuleHandle(0) ' функция класса Function wndproc(hwnd As HWND, msg As Uinteger,_ wparam As WPARAM, lparam As LPARAM) As Integer Static As HWND Progress,Progress2 Select Case msg Case WM_CREATE Progress = CreateWindowEx(0,"msctls_progress32","",WS_VISIBLE Or WS_CHILD Or PBS_SMOOTH,10,10,200,20,hwnd,Cast(HMENU,1),0,0) Progress2 = CreateWindowEx(0,"msctls_progress32","",WS_VISIBLE Or WS_CHILD Or PBS_MARQUEE,10,40,130,20,hwnd,Cast(HMENU,2),0,0) SetTimer(hwnd,1,100,0) Case WM_TIMER Static As Integer state = 0 SendMessage(Progress,PBM_SETPOS,state,0) SendMessage(Progress2,PBM_SETPOS,state,0) state+=1 If state>=100 Then state = 0 Case WM_DESTROY PostQuitMessage(0) End Select Return DefWindowProc(hwnd,msg,wparam,lparam) End Function With wc .cbSize=SizeOf(WNDCLASSEX) .style=CS_HREDRAW Or CS_VREDRAW .lpfnWndProc=@wndproc .hInstance=Hinst .hIcon=LoadIcon(0,IDI_QUESTION) .hCursor=LoadCursor(0,IDC_ARROW) .hbrBackground=Cast(HBRUSH,COLOR_WINDOW) .lpszClassName=StrPtr(NameClass) .hIconSm=.hIcon End With If RegisterClassEx(@wc)=0 Then Print "Register error, press any key" Sleep End Endif CreateWindowEx(0,NameClass,"Окно с Progress Bar",_ WS_VISIBLE Or WS_OVERLAPPEDWINDOW,10,10,300,200,0,0,Hinst,0) While GetMessage(@msg,0,0,0) TranslateMessage(@msg) DispatchMessage(@msg) Wend
Progress.rc
#DEFINE MANIFEST 24 #DEFINE IDR_XPMANIFEST1 1 IDR_XPMANIFEST1 MANIFEST "xpmanifest.xml"
xpmanifest.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="Company.Product.Name" type="win32" /> <description></description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
содержание | назад | вперед