Нужно обрабатывать сообщение WM_HSCROLL или WM_VSCROLL, когда пользователь взаимодействует с Trackbar Код (C): #include <windows.h> #include <commctrl.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_HSCROLL: { if ((HWND)lParam == GetDlgItem(hwnd, IDC_TRACKBAR)) { // Replace IDC_TRACKBAR with your trackbar ID int pos = SendMessage((HWND)lParam, TBM_GETPOS, 0, 0); if (pos == 100) { // Assuming 100 is the maximum value MessageBox(hwnd, "Trackbar reached the maximum value!", "Notification", MB_OK); } else if (pos == 0) { // Assuming 0 is the minimum value MessageBox(hwnd, "Trackbar reached the minimum value!", "Notification", MB_OK); } } break; } // Handle other messages... } return DefWindowProc(hwnd, uMsg, wParam, lParam); }
Большое спасибо Research! Это то, что нужно. Еще одна из идей, слайдер передвигается по таймеру Код (ASM): MAX_VALUE = 100 .data CurrentStep dq MAX_VALUE Message db '100% Completed',0 . . . .code . . . wmCREATE: . . . ;посылаем прогресс-бару шаг=2 invoke SendMessage,hwndprogress,PBM_SETSTEP,2,0 invoke SendMessage,hwndprogress,PBM_SETRANGE,0,MAX_VALUE ;CurrentStep=MAX_VALUE таймер на каждом шаге отнимает у CurrentStep 2, когда CurrentStep ;станет равным нулю счет остановится и придет сообщение '100% Completed' invoke SetTimer,hWnd,IDC_TIMER,200,0 mov TimerID,rax . . . wmTIMER: . . . sub CurrentStep,2;MAX_VALUE/2=50 jne wmBYE invoke KillTimer,hWnd,TimerID mov TimerID,0 invoke SendMessage,hwndStatus,SB_SETTEXT,0,&Message wmBYE: leave retn