Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Не получаеться повесить функцию на Static


Автор: Modder 4.1.2008, 02:36
Как Visual C++ повесить событие при нажатии кнопки мыши на статик картинку?
Столкнулся с проблемой в проге. Мне нужно чтобы при нажатии на статик, который преставляет собой иконку, происходило какое-то действие. Как это сделать? На кнопку без проблем, а на статик ну никак. smile 

Автор: 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! smile 
З.Ы. Только скорость обработки клика меньше чем у кнопки, поэтому если быстро клацать, то не все клики будут обработаны.
З.З.Ы. STN_CLICKED так и не появился.

Автор: Earnest 5.1.2008, 15:56
Цитата(Modder @  4.1.2008,  19:54 Найти цитируемый пост)
З.З.Ы. STN_CLICKED так и не появился. 

Это ты так проявляешь сомнение в существовании этого кода, что ли? smile 

BN_CLICKED == STN_CLICKED == 0, вот и весь секрет твоего "заработало". Слова разные, т.к. так удобно и принято - разные понятия обозначать разными словами.

Такое ощущение, что ты не программировать учишься, а перенимаешь эзотерический опыт у старых шаманов. smile 

Ты хоть понимаешь, что компилятор != среда программирования, и совсем != этой хрени под громким названием "визард": может, забыли туда разработчики эти константы вбить, или решили, что не так важны они. 

Я тебе сейчас умную мысль скажу, а ты запомни, пригодиться: smile 
WinAPI далеко не исчерпываются теми константами, функциями и обработчиками, которые "знает" визард.

Да, насчет "если быстро клацать" - причина в том, что в результате получается double-click (т.е. на каждый второй клик тебе приходит уведомление не STN_CLICKED, а STN_DBLCLK). А у кнопки стиль double-click по умолчанию выключен. Можно выключить его и у статика, а можешь просто ловить дополнительно double-click. Корректнее, видимо, второе, т.к. этот стиль относится не конкретному окну, а к классу "статик". Но, строго говоря, твой контрол по поведению больше напоминает кнопку, поэтому корректней и сделать его кнопкой.





Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)