FreeBasic
Главная
Вход
Регистрация
Воскресенье, 22.10.2017, 05:30Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Freebasic » Исходники » ProgressBar на окне TaskBar (С абстрактными методами)
ProgressBar на окне TaskBar
haavДата: Четверг, 21.05.2015, 20:19 | Сообщение # 1
Генерал-лейтенант
Группа: Администраторы
Сообщений: 777
Репутация: 34
Статус: Offline
За основу был взят вот этот код. Я воспользовался новыми возможностями FB (абстрактными методами) и реализовал более упрощенный код. Теперь в коде исчез лишний первый параметр в методах (ранее для каждого метода первым параметром всегда стоял указатель на текущий интерфейс). Более того, теперь не надо извращений с промежуточным указателем на виртуальную таблицу lpVtbl. Все таки довольно удобные возможности реализованы в FB wine , теперь бы еще заголовки переписали для COM с учетом абстрактных и виртуальных методов moonw

Код
#INCLUDE "window9.bi"

Enum TBPFLAG
  TBPF_NOPROGRESS = 0
  TBPF_INDETERMINATE = 1
  TBPF_NORMAL = 2
  TBPF_ERROR = 4
  TBPF_PAUSED = 8
End Enum

Enum THUMBBUTTONMASK
  THB_BITMAP = 1
  THB_ICON = 2
  THB_TOOLTIP = 4
  THB_FLAGS = 8
End Enum

Enum THUMBBUTTONFLAGS
  THBF_ENABLED = 0
  THBF_DISABLED = 1
  THBF_DISMISSONCLICK = 2
  THBF_NOBACKGROUND = 4
  THBF_HIDDEN = 8
  THBF_NONINTERACTIVE = 10
End Enum

Type THUMBBUTTON
  As THUMBBUTTONMASK dwMask
  As UINT iId
  As UINT iBitmap
  As HICON hIcon
  As WString*260 szTip
  As THUMBBUTTONFLAGS dwFlags
End Type

Type ITaskbarList3 extends object
  Declare abstract Function QueryInterface (ByVal iid As REFIID, ByVal ppvObject As Any Ptr Ptr) As HRESULT
  Declare abstract Function AddRef () As ULong
  Declare abstract Function Release () As ULong
  Declare abstract Function HrInit () As HRESULT
  Declare abstract Function AddTab (a As HWND) As HRESULT
  Declare abstract Function DeleteTab (a As HWND) As HRESULT
  Declare abstract Function ActivateTab (a As HWND) As HRESULT
  Declare abstract Function SetActiveAlt (a As HWND) As HRESULT
  Declare abstract Function MarkFullscreenWindow (a As HWND,fFullscreen As BOOL) As HRESULT
  Declare abstract Function SetProgressValue (hwnd As HWND ,ullCompleted As Ulongint,ullTotal As Ulongint) As HRESULT
  Declare abstract Function SetProgressState (hwnd As HWND,tbpFlags As TBPFLAG) As HRESULT
  Declare abstract Function RegisterTab (hwndTab As HWND ,hwndMDI As HWND) As HRESULT
  Declare abstract Function UnregisterTab (hWndTab As HWND) As HRESULT
  Declare abstract Function SetTabOrder (hWndTab As HWND,hWndInsertBefore As HWND) As HRESULT
  Declare abstract Function SetTabActive (hWndTab As HWND,hWndMDI As HWND,tbatFlags As DWORD)As HRESULT
  Declare abstract Function ThumbBarAddButtons (hWnd As HWND,cButtons As UINT,pButton As THUMBBUTTON Ptr)As HRESULT
  Declare abstract Function ThumbBarUpdateButtons (hWnd As HWND,cButtons As UINT,pButton As THUMBBUTTON Ptr)As HRESULT
  Declare abstract Function ThumbBarSetImageList (hWnd As HWND,himl As HIMAGELIST)As HRESULT
  Declare abstract Function SetOverlayIcon (hWnd As HWND,hIcon As HICON,pszDescription As LPCWSTR)As HRESULT
  Declare abstract Function SetThumbnailTooltip (hWnd As HWND,pszTip As LPCWSTR)As HRESULT
  Declare abstract Function SetThumbnailClip (hWnd As HWND,prcClip As LPRECT)As HRESULT
End Type

Dim Shared  CLSID_TaskbarList As IID = Type(&h56FDF344, &hFD6D, &h11D0, {&h95, &h8a, &h00, &h60, &h97, &hc9, &ha0, &h90})
Dim Shared  IID_ITaskbarList3 As IID = Type(&hEA1AFB91, &h9E28, &h4B86, {&h90, &hE9, &h9E, &h9F, &h8A, &h5E, &hEF, &hAF})

Dim As Integer ev, pct
Dim As HWND hwnd
Dim As RECT rec
Dim As ITaskbarList3 Ptr tl3

hwnd =  OpenWindow("", 0, 0, 300, 80)

ProgressBarGadget(1, 10,10, 260, 20, 0, 100)

CoInitialize(Null)
CoCreateInstance(@CLSID_TaskBarList,Null,CLSCTX_INPROC_SERVER,@IID_ITaskBarList3,@tl3)
tl3->HrInit()
tl3->SetProgressValue(hwnd,0,100)
tl3->SetProgressState(hwnd,TBPF_NORMAL)

GetClientRect(hwnd, @rec)
rec.right /= 2
rec.bottom /= 2
tl3->SetThumbnailClip(hwnd, @rec)

Do
  ev = WindowEvent()
  If ev = 0 Then
   If pct = 101 Then
    FreeGadget(1)
    SetWindowText(hwnd, "Ошибка")
    tl3->SetProgressState(hwnd,TBPF_ERROR)
   Else
    SetWindowText(hwnd, Str(pct))
    SetGadgetState(1, pct)
    tl3->SetProgressValue(hwnd,pct,100)
    pct += 1
   Endif
   Sleep 20
  Endif
  Sleep(1)
Loop    Until ev = EventClose

If tl3 Then
  tl3->Release()
  CoUninitialize()
EndIf


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Исходники » ProgressBar на окне TaskBar (С абстрактными методами)
Страница 1 из 11
Поиск: