Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: PopUp панелька на элементе CListBox (mfc)  (Прочитано 11182 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Amadeus
Интересующийся

ru
Offline Offline

« : 14-09-2013 18:36 » 

Здравствуйте. Помогите, пожалуйста, с такой проблемкой. Есть у меня ListBox с кучей элементов, каждый из которых некоторой сложности структура. В этой структуре есть определенные поля которые я хочу выводить во всплывающей панельке, когда пользователь наводит мышкой на элемент. Путем долгих мучительных размышлений не слишком подкованным в программировании на С++ мозгом я пришел к такому: рисую данную панельку (пока только обычный Rectangle) по ON_WM_MOUSEMOVE c Invalidate'ом. В общем-то, что надо достигнуто - елозим мышкой по ListBox'у, за курсором послушно мотается прямоугольничек, но все это хозяйство безбожно мерцает. Я не бездельник и не кинулся сразу в интернеты с требованием сделать за меня красиво, почитал статьи и выяснил что рисовать надо в буфер. И вот тут у меня беда. Не понимаю я как это все реализовать. Мерцает отрисовка элементов, которая как я понимаю в DrawItem. Опять же как я понимаю каждый вызов DrawItem рисует отдельный элемент, смысл тогда рисовать их в буфер если они все равно будут блитаться один за другим. Пытался переопределить OnPaint, у меня вообще все пропало. Короче, пришло время кричать sos Жаль
И да, я уверен что есть более изящное решение чем малевать прямоугольник по движению мыши, буду крайне благодарен если мне такое решение подскажут.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 14-09-2013 19:21 » 

Правильнее будет создать маленькое окошко без рамок и выводить всё туда, а само окошко двигать за мышью.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 14-09-2013 22:01 » 

Про двойную буферизацию уже много и подробно обсуждали на форуме, но я согласен с Димкой, лучше создать своё окошко. Если не обязательно, чтобы оно постоянно "моталось" за курсором, то можно показывать простой ToolTip.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Amadeus
Интересующийся

ru
Offline Offline

« Ответ #3 : 14-09-2013 22:45 » 

Вы имеете в виду приклеить к курсору новый диалог? Я ведь тогда потеряю фокус с рабочего диалога или нет? Или это не проблема? Хотя чего зря вопросами сыпать, - завтра проснусь и попробую. Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 15-09-2013 01:00 » 

Ну, а ToolTip как работает?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Amadeus
Интересующийся

ru
Offline Offline

« Ответ #5 : 15-09-2013 07:46 » 

Да бог его знает как он работает. Я его и хотел изначально использовать, но как-то неосилил, говорю же - неуч. Ну вот то есть вывести тултип типа "Это мой ListBox!" то получается, а вот как мне надо, отдельный для каждого элемента не умею так(
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 15-09-2013 10:28 » 

Amadeus, почему диалог? Ты, кажется, не догоняешь: в Windows всё - окна. Даже кнопки и прочие элементы управления - это отдельные окна. Окно - это прямоугольная область экрана, которая имеет геометрическое положение относительно других окон, и куда можно что-то рисовать, и которые умеют обрабатывать события устройств ввода. Элементы управления имеют стандартные процедуры отрисовки, но для некоторых можно сделать пользовательские - OwnerDraw. Так ты работаешь с элементами списка. Ну вот и сделай себе собственное окно вроде tooltip, чтобы оно ездило за мышкой, пока мышка в списке, и в котором рисуется то, что тебе надо.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Amadeus
Интересующийся

ru
Offline Offline

« Ответ #7 : 15-09-2013 11:44 » 

О, так я кажется догнал)) Спасибо за пендаль в правильном направлении) То есть, если я унаследуюсь например от CStatic, нарисую что мне надо и буду его таскать, оно ведь по сути тоже CWnd? Я догоняю?) или еще нет?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 15-09-2013 14:24 » 

Amadeus, окна имеют разные свойства. Не уверен, что вот прямо CStatic будет ездить, но направление верное.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 15-09-2013 18:28 » 

Amadeus, а если не побояться и не от CStatic, а сразу от CWnd? Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Amadeus
Интересующийся

ru
Offline Offline

« Ответ #10 : 15-09-2013 20:19 » 

Джон, а я не из пугливых)) Кстати, еще раз спасибо огромное, у меня вроде все получилось. Окошко послушно рисуется и мотается за мышкой. Пока еще передачей туда нужных мне данных не озадачился, хочу сначала сделать задержку появления, скажем, в полсекунды и убирать окошко когда мышкой активно елозят по списку.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 15-09-2013 22:05 » new

Эт хорошо, что не из пугливых. Такие люди на форуме приветствуются.  Класс!
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines