Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как сделать чтобы текст менял цвет, если провести


Автор: firelex 9.12.2003, 12:11
Доброго времени суток всем!

Проблема такая:

есть "Хелло, ворлд!" - прога, которая чатет файл и выводит его содержимое построчно путем TextOut(...) пред очи юзера. Как сделать, чтобы на выведенный текст можно было "кликнуть" мышкой, т.е. чтобы при наведении он становился напр. красным, а при клике - появлялся диалог?

Автор: firelex 9.12.2003, 12:25
Пардон, забыл указать: прога написана в VC++ с MFC

Автор: <Spawn> 9.12.2003, 14:01
Напимер так:
1) Вычисляешь регион в который входит текст;
2)При перемещении мыхи(cообщение WM_MOUSEMOVE) проверяешь входит ли позиция курсора в этот регион функцией PtInRqn;
3) Если курсор входит в этот регион то перерисовываешь текст нужным цветом.

Автор: Step 9.12.2003, 17:45
если еще и кликнул в этом регионе то делаешь домодал для твоего окна

Автор: Nastya 9.12.2003, 18:20
А обезательно текст должен выводится TextOut. если можно на окне создать статик, то будет гораздол проще, по крайней мере не возится с регионами.

Автор: Step 9.12.2003, 18:26
судя по всему едет речь про сди, на сколько мне кажется что гораздо проще перерисовывать, чем в таком окне статик делать

Автор: firelex 12.12.2003, 12:58
Спасибо, большое

Да это все в сди - по-этому проще TextOut(...)

Я потихоньку сам тоже до этого додумался (регионы и т.д.)
Только я запоминаю координаты региона (x1, y1, x2, y2), потом из них делаю CRgn.

И вот тут начинается хохма - координаты, которые дает OnMouseMove(UINT nFlags, CPoint point) и запомненные координты на совпадают!

Я имею ввиду, если я запомнил напр. (7000, -3000, 7900, -3200), то мышка возвращает "Х=<622> Y=<54>" bored.gif

Автор: firelex 15.12.2003, 12:53
Как всегда - одни проблемы решились, другие нашлись.

Непонятки с координатами решились с помощью HIMETRICtoDP из класса CDC.

Теперь такое вот:
После того, как текст нарисовали (с SetBkMode(TRANSPARENT), потому как все это на картинке) и провели по нему мышкой - пытаемся его перерисовать другим цветом вот так

Код

          this->GetDC()->SetTextColor(RGB(255,0,0));
          this->GetDC()->TextOut(x, y, str);



Выходит текст черный на белом фоне.
Что здесь не так - не пойму. sad.gif

Автор: Step 15.12.2003, 13:18
перед перерисовкой, нужно опять указать транспарент, и не получай дважды дс получи его раз и пользуйся....

Автор: firelex 15.12.2003, 14:00
Е-мое! notify.gif
Занес DC в переменную и все заработало...

Спасибо

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