![]() |
|
|
![]()
|
|
| Modder |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.1.2008 Репутация: нет Всего: нет |
Как Visual C++ повесить событие при нажатии кнопки мыши на статик картинку?
Столкнулся с проблемой в проге. Мне нужно чтобы при нажатии на статик, который преставляет собой иконку, происходило какое-то действие. Как это сделать? На кнопку без проблем, а на статик ну никак. |
|||
|
||||
| BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
Не помню, как там в старых версиях VC++, в VC++ 9 (2008) правой кнопкой на элементе, меню Add Event Handler...
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
| Modder |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.1.2008 Репутация: нет Всего: нет |
Да, у меня есть там Handler BN_CLICKED. Но в программе при нажатии на этот статик ничего не происходит!
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
BN_CLICKED - это сообщение от кнопки. А у тебя статик.
Статик может посылать уведомления STN_CLICKED, STN_DBLCLK если он создан с флагом SS_NOTIFY. И это все. Если нужна более гибкая обработка мышиных и клавиатурных событий - делай свой контрол на основе кнопки. -------------------- ... |
|||
|
||||
| Modder |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.1.2008 Репутация: нет Всего: нет |
А там нет STN_CLICKED. Как задать флаг SS_NOTIFY?
|
|||
|
||||
| Modder |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.1.2008 Репутация: нет Всего: нет |
Все! В стилях статика поставил галочку Notify и заработало с BN_CLICKED!
З.Ы. Только скорость обработки клика меньше чем у кнопки, поэтому если быстро клацать, то не все клики будут обработаны. З.З.Ы. STN_CLICKED так и не появился. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Это ты так проявляешь сомнение в существовании этого кода, что ли? BN_CLICKED == STN_CLICKED == 0, вот и весь секрет твоего "заработало". Слова разные, т.к. так удобно и принято - разные понятия обозначать разными словами. Такое ощущение, что ты не программировать учишься, а перенимаешь эзотерический опыт у старых шаманов. Ты хоть понимаешь, что компилятор != среда программирования, и совсем != этой хрени под громким названием "визард": может, забыли туда разработчики эти константы вбить, или решили, что не так важны они. Я тебе сейчас умную мысль скажу, а ты запомни, пригодиться: WinAPI далеко не исчерпываются теми константами, функциями и обработчиками, которые "знает" визард. Да, насчет "если быстро клацать" - причина в том, что в результате получается double-click (т.е. на каждый второй клик тебе приходит уведомление не STN_CLICKED, а STN_DBLCLK). А у кнопки стиль double-click по умолчанию выключен. Можно выключить его и у статика, а можешь просто ловить дополнительно double-click. Корректнее, видимо, второе, т.к. этот стиль относится не конкретному окну, а к классу "статик". Но, строго говоря, твой контрол по поведению больше напоминает кнопку, поэтому корректней и сделать его кнопкой. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |