Как узнать, что курсор находится над STATIC'ом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Как узнать, что курсор находится над STATIC'ом

Сообщение XairOn » 14.09.2006 (Чт) 19:39

Доброго времени суток, господа. Такая проблема: мне нужно узнать, что курсор мыши находится над STATIC'ом (он же Label), я начал рыть в таком направлении (пишу на чистом API):
Код: Выделить всё
   'тут обработка события WM_MOUSEMOVE
   Dim curPos As POINT
   GetCursorPos curPos
   ScreenToClient hwndMainWindow, curPos
   if WindowFromPoint (hwndMainWindow, curPos) = hwndBtnExit Then MessageBox  0, "ок", "Title", MB_OK

Чуть позже, из MSDN узнал, что WindowFromPoint для STATIC'а возвращает хэндл, окна находящегося под этим STATIC'ом. Потом всё из того же MSDN узнал ещё про несколько функций:
ChildWindowFromPoint
ChildWindowFromPointEx
RealChildWindowFromPoint
в их описании, ни слова не сказано, о том, что они со STATIC'ами не работают, но тем не менее, на практике именно так и получается. Подскажите пожалуйста вариант решения проблемы.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.09.2006 (Чт) 19:46

Извращенец.
Код: Выделить всё
GetCursorPos pt
dim dx as long, dy as long
dx=me.left/screen.TwipsPerPixelX
dy=me.top/screen.TwipsPerPixelY
If pt.x -dx> Label1.left and pt.x-dx<label.left+ _
label.width and pt.y-dy>label.top and _
pt.y-dy<label.top+label.height then
Курсор таки над статиком.
end if
Изображение

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 14.09.2006 (Чт) 19:51

т.е. STATIC <> Label

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.09.2006 (Чт) 19:56

XairOn
Label, кажется, обёртка над статиком. А STATIC - над API DrawText.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.09.2006 (Чт) 19:59

Ничего подобного. Label и STATIC не имеют ничего общего.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.09.2006 (Чт) 20:10

Гм. Тогда вопрос к автору: что нужно: Label или STATIC?(Похоже что приведённый код на PB, а значит таки статик.)
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.09.2006 (Чт) 21:24

Автор написал, что создаёт окна чистым API, и поэтому STATIC.
А код на VB6, и совершенно не похож на PB.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 14.09.2006 (Чт) 22:26

tyomitch писал(а):Ничего подобного. Label и STATIC не имеют ничего общего.

Да, насчет STATIC (он же Label) - тут я конечно погорячился, но Ничего подобного это тоже перебор по-моему. В конечном счете, я так думаю, STATIC основа Label. Но это не принципиально важно в данном случае, тут ни о каких Label речи не идет, окно на чистом API так что я думаю, лучше поговорим все таки о STATIC'е ;) Есть предложения, господа?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.09.2006 (Чт) 22:28

До поступления предложений, всё же, повторим - label и static не имеют ничего общего вообще совсем никак.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 15.09.2006 (Пт) 8:57

GSerg писал(а):До поступления предложений, всё же, повторим - label и static не имеют ничего общего вообще совсем никак.

Т.е. как это label и static не имеют ничего общего вообще совсем никак. Вот в решении данного вопроса, это вообще какую роль играет? Или вы уже по другому поводу общаетесь? Да даже если label и static абсолютно одно и то же, здесь ведб это не при чем насколько я понимаю.

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 15.09.2006 (Пт) 13:08

Проблема решена. Всем спасибо. Дело было в следующем: STATIC создавался со стилем SS_NOTIFY, убрал стиль, ChildWindowFronPoint заработал. Правда теперь не знаю как буду другие сообщения обрабатывать (click например) но это будет потом, главное что сейчас работает :) Но тут возникла ещё одна проблема, вобщем как бы объяснить получше. Вообще-то мне нужен был хэндл окна под курсором, что бы знать, находится ли этот курсор на STATIC'е для того, что бы в зависимости от положения курсора подчеркивать текст STATIC'а (что-то вроде ссылки вобщем). И проблема такая, допустим я отследил событие "курсор над STATIC'ом" посылаю сообщение WM_SETFONT с новым шрифтом, только вот почему-то STATIC не обновляется. Что-то я тут расписался черезчур :) Попробую покороче изложить. Функци UpdateWindow, RedrawWindow, как-то не очень хорошо работают, точнее не так как нужно мне. Я посылаю STATIC'у сообщение WM_SETFONT, после чего этот STATIC нужно обновить, что бы появилась черта под текстом, вышеуказанные функции почему-то этого не делают, вот например если послать WM_SETFONT на STATIC потом свернуть окно, затем снова его развернуть, черта появляется, или например ShowWindow(hwndStaticInfo, false) вызвать, т.е. скрыть окно, а затем снова показать этой же функцией, то все нормально, окно обновляется. Может подскажите как эти функции работают, может быть какое-то сообщение послать нужно STATIC'у что бы он обновился, я уже всякие разные пробовал, не помогает :(

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.09.2006 (Пт) 13:58

Навскидку: послать сообщение WM_PAINT
Весь мир матрица, а мы в нем потоки байтов!

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 15.09.2006 (Пт) 14:28

!Viper! писал(а):Навскидку: послать сообщение WM_PAINT

Разумеется я это пробовал. Не помогает. Эффект нулевой.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.09.2006 (Пт) 14:43

InvalidateRect до кучи остается проверить
Весь мир матрица, а мы в нем потоки байтов!

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 15.09.2006 (Пт) 15:28

!Viper! писал(а):InvalidateRect до кучи остается проверить

Да, тут ты верно подметил и я забыл об этом написать, именно эта функция обновляет окно "правильно" (так как нужно мне), но старое изображение почему-то не стирает, а рисует прямо поверх него, получается не очень красиво. Убирать старое изображение, я пробовал, но что-то тоже никак не выходит (

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.09.2006 (Пт) 16:40

XairOn, подчёркивающаяся ссылка в виде статика есть в моём проекте Tiger2. Можешь посмотреть, как там сделано.
Изображение

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 15.09.2006 (Пт) 19:19

tyomitch писал(а):XairOn, подчёркивающаяся ссылка в виде статика есть в моём проекте Tiger2. Можешь посмотреть, как там сделано.

Спасибо тебе, погляжу, так сказать, в действии :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 138

    TopList