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

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

04.01.2016, 12:54. Просмотров 323. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2016, 12:54
Ответы с готовыми решениями:

Светофор, в котором цвет "зажигается" при нажатии на лампу левой клавишей мыши
Нарисовать светофор, в котором цвет «зажигается» при нажатии на эту лампу левой клавишей мыши....

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd"
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере массива больше 950 в...

При установке гиперссылки на вордовский файл в меню нет кнопок "Закладки" и "Место в документе"
Из таблицы пытаюсь сослаться на ранее созданную закладку в вордовском документе из Access 203 (и...

Просмотр строк файла при нажатии кнопок "Вперед" и "Назад"
Есть программа. В ней якобы БД, которая на самом деле записана в файл.В этом файле логин+пароль в...

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

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2016, 12:54

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

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

Создание кнопок "Удалить" и "Переместить"
Есть простой файловый менеджер . Необходимо создать 2 кнопки , 1 из которых будет удалять выбранный...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.