Вопрос по элементу Trackbar

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl___, 15 авг 2024.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.786
    Как получить сообщение о том, что Trackbar достиг конца диапазона?
     
  2. Research

    Research Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    115
    Нужно обрабатывать сообщение WM_HSCROLL или WM_VSCROLL, когда пользователь взаимодействует с Trackbar
    Код (C):
    1. #include <windows.h>
    2. #include <commctrl.h>
    3.  
    4. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    5.     switch (uMsg) {
    6.         case WM_HSCROLL: {
    7.             if ((HWND)lParam == GetDlgItem(hwnd, IDC_TRACKBAR)) { // Replace IDC_TRACKBAR with your trackbar ID
    8.                 int pos = SendMessage((HWND)lParam, TBM_GETPOS, 0, 0);
    9.                 if (pos == 100) { // Assuming 100 is the maximum value
    10.                     MessageBox(hwnd, "Trackbar reached the maximum value!", "Notification", MB_OK);
    11.                 } else if (pos == 0) { // Assuming 0 is the minimum value
    12.                     MessageBox(hwnd, "Trackbar reached the minimum value!", "Notification", MB_OK);
    13.                 }
    14.             }
    15.             break;
    16.         }
    17.         // Handle other messages...
    18.     }
    19.     return DefWindowProc(hwnd, uMsg, wParam, lParam);
    20. }
     
    Mikl___ нравится это.
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.786
    Большое спасибо Research! Это то, что нужно. Еще одна из идей, слайдер передвигается по таймеру
    Код (ASM):
    1. MAX_VALUE = 100
    2. .data
    3. CurrentStep dq MAX_VALUE
    4. Message db '100% Completed',0
    5.        . . .
    6. .code
    7.        . . .
    8. wmCREATE: . . .
    9. ;посылаем прогресс-бару шаг=2
    10.          invoke SendMessage,hwndprogress,PBM_SETSTEP,2,0
    11.          invoke SendMessage,hwndprogress,PBM_SETRANGE,0,MAX_VALUE
    12. ;CurrentStep=MAX_VALUE таймер на каждом шаге отнимает у CurrentStep 2, когда CurrentStep
    13. ;станет равным нулю счет остановится и придет сообщение '100% Completed'
    14.          invoke SetTimer,hWnd,IDC_TIMER,200,0
    15.          mov TimerID,rax
    16.          . . .
    17. wmTIMER: . . .
    18.          sub CurrentStep,2;MAX_VALUE/2=50
    19.          jne wmBYE
    20.          invoke KillTimer,hWnd,TimerID
    21.          mov TimerID,0
    22.          invoke SendMessage,hwndStatus,SB_SETTEXT,0,&Message
    23. wmBYE:   leave
    24.          retn
     
    Research нравится это.