Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 0 / 0
Регистрация: 04.01.2016
Сообщений: 2

Создание "некривых" кнопок, которые будут подсвечиваться при наведении мыши

04.01.2016, 12:54. Показов 910. Ответов 0

Студворк — интернет-сервис помощи студентам
Маленькая ремарка: эта тема уже поднималась, но никто не делал этого в отдельном классе!

Такой вопрос имею к Вам, господа форумчане:

У меня создан отдельный класс xWindow, в котором описаны функции:
регистрация класса
создания окна
static LRESULT CALLBACK WndProc (в которой я получаю указатель на this через GetWindowLongPtr и передую управление в myWndProc)
LRESULT CALLBACK myWndProc (в котором уже соответственно реализована обработка сообщений)


все это сделано для того, чтобы в main можно было красиво написать (и это работает):
C++
1
2
3
4
5
xWindow * wnd = new xWindow(hInst);
    if (!wnd->Add_WndClass(hInst)) return false;
    if (!wnd->Add_Wnd(hInst, iCmdShow)) return false;
    wnd->Add_Control(hInst, iCmdShow);
//цикл сообщений
далее я пытался сделать собственные кнопки таким образом чтобы они были класса button но рисовались мною
делал это тремя способами:
1 - через CustomDraw, однако сообщения WM_Notify не приходит родительскому окну ни в каком случае (все остальные сообщения проходят)
2 - через WM_DRAWITEM (супер работает, рисую кнопку как хочу)

но общая задача была такая, чтобы кнопка подсвечивалась когда курсор мышки над ней и плавно гасилась, когда он вне кнопки. в WM_DRAWITEM есть проверка на фокус кнопки или на select - это нифига не положение мышки над кнопкой. Конечно можно сделать через Mousemoove или проверять положение курсора по таймеру и тп, но если кнопок будет больше 20 то все это будет коряво. поэтому пошел 3м путем:

3 - субклассирование кнопки
HWND button = createWindow ()
SetWindowLongPtr(button , GWLP_WNDPROC, (LONG_PTR)BtnProc);

Далее пишу btnProc в своем классе, если сделать ее не статичной то SetWindowLongPtr выдает ошибку.
сделал статичной
прописал внутри WM_PAINT - вуаля, кнопки рисуются так как я хочу
MouseMoove срабатывает тоже четко, сразу генерится событие если мышка над кнопкой, можно сделать флажок и в wm_paint рисовать по другому к примеру
однако не работает тогда WM_COMMAND
и более того передать дальше сообщение для общей оконной процедуры тоже нельзя, тк мы в статической функции и нельзя в ней использовать методы своего класса.

Подскажите как быть? или надо так же создавать не статическую myButtonWndProc и передавать в нее обработку..

Если какие либо другие идеи, то тоже готов выслушать! Заранее спасибо!
Всех с Новым Годом!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.01.2016, 12:54
Ответы с готовыми решениями:

Ссылка должна подсвечиваться при наведении на картинку
Ссылка должна подсвечиваться при наведении на картинку. А она подсвечивается только тогда, когда я навожу на нее сверху. И текст наверху,...

Как изменить цвет выделения кнопок при наведении мыши
Подскажите как изменить цвет выделения кнопок при наведении мыши в приложении WPF???

Кнопки при наведении на которые будут увеличиваться (VS2022)
Снова я со своими вопросами, вот нашел свой старый проект на C# и хотел на базе него сделать другой проект, я реолизавал идею с кнопками...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2016, 12:54
Помогаю со студенческими работами здесь

Создание эффекта при наведении мыши
Народ подскажите как создать эффект наведения мыши как в вэб - дизайне . Я просто нарисовал 2 кнопки при нажатии на картинку верхняя...

Реализовать функции кнопок, которые при нажатии будут выводить определенные виды заявок: покупку, продажу или все сразу.
День добрый форумчане. Задача такая: Есть скрипт, который выводит созданные заявки в форму, разделяет их на цвета в соответствии с...

Массив из кнопок, которые при клике будут передавать номер строки и номер столбца
Нужно создать массив 10х10 из кнопок, которые при клике будут передавать номер строки и номер столбца в этот метод. Помогите, пожалуйста

Как сделать скрипт на создание 3-4 объектов, которые будут спавняться при ЛКМ, но с разными значениями
Я совсем новичек в этом, поэтому не злитесь, что нубик)) Короче, есть зона Спавна, где при нажатии на ЛКМ спавниться 1 шарик фиолетового...

Создание кнопок в рантайме по клику мыши. Как прекратить создание?
Здравствуйте форумчане. Столкнулся со следующей проблемой. В поле Edit1 я ввожу число(например 5) и хочу создать такое количество кнопок на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru