Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2009, 21:20   #1
Css
Пользователь
 
Аватар для Css
 
Регистрация: 19.11.2009
Сообщений: 13
Вопрос Как лучше узнавать, что мышь находится над окном (или частью окна)?

Пробую создавать свою первую программу "на чистом Win32API" (с) в Делфи7...

Планирую делать полностью свой интерфейс (кнопочки там необычные, окно нестандартной формы итд).
Как так делают в профессиональных программах не представляю, а посему просто "рисую" битмапы на форме.
Так вот хотелось бы сделать так, чтоб при наведении мышью на кнопку последняя как бы "подсвечивалась"...

Проверил пару подобных "расфуфыренных" профессиональных программ - некоторые используют для кнопок и других элементов окна класса "Static", а некоторые по видимому просто рисует всё на форме (как делаю и я)... Не знаю как лучше...
В принципе можно проверять координаты мыши (по таймеру или при WM_PAINT) и если попадает на кнопку (на статик или в область/регион кнопки) - рисовать подсвеченную.
Но мне кажется это как бы нерациональным, да и только одна из программ так делает, остальные как-то по другому "палят" где курсор...

Посоветуйте, пожалуйста... Как лучше узнавать, что мышь находится над окном (или частью окна)?
Долой готовые компоненты! Учите «Win32API»!
Css вне форума Ответить с цитированием
Старый 27.11.2009, 21:39   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

пробуйте вариант от Alex Cones
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 27.11.2009, 21:59   #3
Css
Пользователь
 
Аватар для Css
 
Регистрация: 19.11.2009
Сообщений: 13
По умолчанию

Так это и есть через проверку координат... Как же тогда другие программы делают?
Долой готовые компоненты! Учите «Win32API»!
Css вне форума Ответить с цитированием
Старый 27.11.2009, 21:59   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Как лучше узнавать, что мышь находится над окном (или частью окна)?
Обрабатывая сообщения CM_MOUSEENTER, CM_MOUSELEAVE.
mihali4 вне форума Ответить с цитированием
Старый 27.11.2009, 22:05   #5
Css
Пользователь
 
Аватар для Css
 
Регистрация: 19.11.2009
Сообщений: 13
По умолчанию

Это если кнопки из статиков делать?
Спасибо, попробую...
Долой готовые компоненты! Учите «Win32API»!
Css вне форума Ответить с цитированием
Старый 27.11.2009, 22:25   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Css Посмотреть сообщение
Пробую создавать свою первую программу "на чистом Win32API" (с) в Делфи7...
Кстати, есть такая Дельфи - APIx 2 - Visual WinAPI
Она фришная, лежит в инете.

Последний раз редактировалось mihali4; 28.11.2009 в 00:26.
mihali4 вне форума Ответить с цитированием
Старый 28.11.2009, 00:25   #7
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
... , а посему просто "рисую" битмапы на форме
Что-то вроде BitBlt() на форму?
Если так, то наверное лучше всё-таки по координатам курсора... А то так и так сверять с координатами объекта придётся...

А что значит
Цитата:
да и только одна из программ так делает, остальные как-то по другому "палят" где курсор
- как вы узнали кто как делает (да и какая разница )?

Можно попробовать делать через Static с картинкой... Вот из одного тестового проекта:
Код:
Var MyHBmp_1: HBITMAP; MyImage_1: HWND;
...
MyHBmp_1:=LoadImage(0, PAnsiChar('C:\pict.bmp'), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
MyImage_1:=CreateWindow('Static', 'MyImage_1', WS_CHILD Or SS_BITMAP Or WS_VISIBLE, 10, 200, 300, 400, MWindow, 0, HInstance, Nil);
SendMessage(MyImage_1, STM_SETIMAGE, IMAGE_BITMAP, MyHBmp_1);
Перерисовывается само, т.е. не нужно перерисовать (BitBlt) вручную все объекты при каждом WM_PAINT...
Во всяком случае удобнее чем вручную, хотя получится много дочерних окон... Не уверен как лучше делать...

Вот только регионы не получается задать, да и статик принимает размеры битмапа (не растягивается)...
Хотя "MS Spy++" показывает что регион задался.....
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 14.02.2010, 05:45   #8
Css
Пользователь
 
Аватар для Css
 
Регистрация: 19.11.2009
Сообщений: 13
По умолчанию

Через CM_MOUSEENTER и CM_MOUSELEAVE как-то фигово получается. Намудрил наверное что-то...
Подсказали вот попробовать через TRACKMOUSEEVENT - так не лучше будет, как думаете?

Цитата:
Сообщение от DomiNick Посмотреть сообщение
как вы узнали кто как делает (да и какая разница )?
Перекрываю половину кнопки другим окном (например блокнотом) и смотрю реагирует ли кнопка на курсор если он как бы над кнопкой, но над блокнотом.
Просто ищу способ как правильнее и рациональнее...
Долой готовые компоненты! Учите «Win32API»!
Css вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что лучше выбрать или чем удобнее) PilGrim Общие вопросы C/C++ 6 12.08.2015 10:46
Что лучше изучать Php или javascript? Arassir PHP 15 14.07.2009 19:21
Подсветить или покрасить строку в dbgrid, над которой находится курсор Artik БД в Delphi 4 12.06.2009 20:43
Что лучше assembler или с++? Alabay Помощь студентам 13 11.01.2009 12:21