Как поменять цвет контролу Trackbar

Тема в разделе "WASM.WIN32", создана пользователем Intro, 5 мар 2025 в 10:27.

Метки:
  1. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    614
    В общем вопрос, как создать такой контрол, я разобрался. Это просто.
    Код (ASM):
    1. aTrackbar  db "msctls_trackbar32", 0
    2. ...
    3. mov esi, CreateWindowEx(0, &aTrackbar, NULL, MS_BASE_TRACKBAR, TrigoPosX, 135, 75, 30, hWnd, TRACKBAR_TRIGO_ID, hInstance, 0)
    4. SendMessage(esi, TBM_SETRANGE, TRUE, MAKELONG(0, 2)) ;// min. & max. positions
    5. SendMessage(esi, TBM_SETPOS, TRUE, 0)
    6. mov hTrackbarTrigo, esi
    А вот как цвет фона этого контрола поменять, не понятно. Надо разбираться, и это достаточно сложно, нанести рисунок на этот контрол не возможно, не предусмотрено.
    --- Сообщение объединено, 5 мар 2025 в 13:46 ---
    Пока так заработало. Создаём кисть для этого контрола.
    Код (ASM):
    1. mov hbrBackgrndTrigo, CreateSolidBrush(ColorCaption[6*4])
    Понятно что в таблице ColorCaption указываем цвет под номером 6.
    Потом возвращаем эту кисть в функции WndProc по событию WM_CTLCOLORSTATIC
    Код (ASM):
    1. .elseif (uMsg == WM_CTLCOLORSTATIC)
    2.     mov eax, hbrBackgrndTrigo
    3. ...
    4.  
    Всё просто, но желательно движок заменить на прямоугольник, а не на лодочку. Но пока так.
    --- Сообщение объединено, 5 мар 2025 в 14:11 ---
    Ещё небольшая оптимизация, т.к. фон этого контрола равен фону главного окна, то делаем так в функции WinMain.
    Код (ASM):
    1. mov [esi].hbrBackground, CreateSolidBrush(ColorCaption[6*4])
    2. mov hbrBackground, eax
    Я тут переименовал кисть на hbrBackground, чтобы подчеркнуть что это кисть главного окна.
    Так что осталось лишь сделать сам ползунок прямоугольным.
    И ещё, флаги Trackbar'а.
    Код (ASM):
    1. MS_BASE_TRACKBAR    = WS_CHILD or WS_VISIBLE or TBS_HORZ or TBS_NOTICKS
    Горизонтальный, риски отключены.
     
    Последнее редактирование: 5 мар 2025 в 14:12
  2. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    525
    Стандартные контролы винды это довольно проработанная, сложная и де-факто объектно-ориентированная библиотека.
    Там есть такие штуки как "наследование" от контролов https://learn.microsoft.com/en-us/windows/win32/controls/subclassing-overview чтобы в самых широких предела менять и обогащать их поведение (фактически - создавать новые контролы на базе старых) или просто custom draw - https://learn.microsoft.com/en-us/windows/win32/controls/custom-draw своя отрисовка без "наследования" от компонент.
    Но надо погружаться и изучать. Конечно там можно много больше, чем подменить цвет кисти по умолчанию.