Было много других замечательных постов, однако я хотел бы сказать, что теоретически вы должны иметь возможность создать REAL элемент управления индикатора выполнения:
- Используйте
CreateWindowEx()
для создания индикатора выполнения
Пример C ++:
hwndPB = CreateWindowEx(0, PROGRESS_CLASS, (LPTSTR) NULL, WS_CHILD | WS_VISIBLE, rcClient.left,rcClient.bottom - cyVScroll,rcClient.right, cyVScroll,hwndParent, (HMENU) 0, g_hinst, NULL);
hwndParent
Должен быть установлен в родительское окно. Для этого можно использовать строку состояния или пользовательскую форму! Вот структура окна Excel, найденная из Spy ++:
![enter image description here](https://i.stack.imgur.com/hUNit.png)
Следовательно, это должно быть относительно просто с использованием функции FindWindowEx()
.
hwndParent = FindWindowEx(Application.hwnd,,"MsoCommandBar","Status Bar")
После создания индикатора выполнения вы должны использовать SendMessage()
для взаимодействия с индикатором:
Function MAKELPARAM(ByVal loWord As Integer, ByVal hiWord As Integer)
Dim lparam As Long
MAKELPARAM = loWord Or (&H10000 * hiWord)
End Function
SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, 100))
SendMessage(hwndPB, PBM_SETSTEP, 1, 0)
For i = 1 to 100
SendMessage(hwndPB, PBM_STEPIT, 0, 0)
Next
DestroyWindow(hwndPB)
Я не уверен, насколько практично это решение, но оно может выглядеть несколько более «официальным», чем другие методы, изложенные здесь.