| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Не получаеться повесить функцию на Static |
| Автор: Modder 4.1.2008, 02:36 |
| Как Visual C++ повесить событие при нажатии кнопки мыши на статик картинку? Столкнулся с проблемой в проге. Мне нужно чтобы при нажатии на статик, который преставляет собой иконку, происходило какое-то действие. Как это сделать? На кнопку без проблем, а на статик ну никак. |
| Автор: BorisVorontsov 4.1.2008, 15:42 |
| Не помню, как там в старых версиях VC++, в VC++ 9 (2008) правой кнопкой на элементе, меню Add Event Handler... |
| Автор: Modder 4.1.2008, 17:12 |
| Да, у меня есть там Handler BN_CLICKED. Но в программе при нажатии на этот статик ничего не происходит! |
| Автор: Earnest 4.1.2008, 17:33 |
| BN_CLICKED - это сообщение от кнопки. А у тебя статик. Статик может посылать уведомления STN_CLICKED, STN_DBLCLK если он создан с флагом SS_NOTIFY. И это все. Если нужна более гибкая обработка мышиных и клавиатурных событий - делай свой контрол на основе кнопки. |
| Автор: Modder 4.1.2008, 17:58 |
| А там нет STN_CLICKED. Как задать флаг SS_NOTIFY? |
| Автор: Modder 4.1.2008, 18:54 |
| Все! В стилях статика поставил галочку Notify и заработало с BN_CLICKED! З.Ы. Только скорость обработки клика меньше чем у кнопки, поэтому если быстро клацать, то не все клики будут обработаны. З.З.Ы. STN_CLICKED так и не появился. |
| Автор: Earnest 5.1.2008, 15:56 |
Это ты так проявляешь сомнение в существовании этого кода, что ли? BN_CLICKED == STN_CLICKED == 0, вот и весь секрет твоего "заработало". Слова разные, т.к. так удобно и принято - разные понятия обозначать разными словами. Такое ощущение, что ты не программировать учишься, а перенимаешь эзотерический опыт у старых шаманов. Ты хоть понимаешь, что компилятор != среда программирования, и совсем != этой хрени под громким названием "визард": может, забыли туда разработчики эти константы вбить, или решили, что не так важны они. Я тебе сейчас умную мысль скажу, а ты запомни, пригодиться: WinAPI далеко не исчерпываются теми константами, функциями и обработчиками, которые "знает" визард. Да, насчет "если быстро клацать" - причина в том, что в результате получается double-click (т.е. на каждый второй клик тебе приходит уведомление не STN_CLICKED, а STN_DBLCLK). А у кнопки стиль double-click по умолчанию выключен. Можно выключить его и у статика, а можешь просто ловить дополнительно double-click. Корректнее, видимо, второе, т.к. этот стиль относится не конкретному окну, а к классу "статик". Но, строго говоря, твой контрол по поведению больше напоминает кнопку, поэтому корректней и сделать его кнопкой. |