| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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>" |
| Автор: firelex 15.12.2003, 12:53 | ||
| Как всегда - одни проблемы решились, другие нашлись. Непонятки с координатами решились с помощью HIMETRICtoDP из класса CDC. Теперь такое вот: После того, как текст нарисовали (с SetBkMode(TRANSPARENT), потому как все это на картинке) и провели по нему мышкой - пытаемся его перерисовать другим цветом вот так
Выходит текст черный на белом фоне. Что здесь не так - не пойму. |
| Автор: Step 15.12.2003, 13:18 |
| перед перерисовкой, нужно опять указать транспарент, и не получай дважды дс получи его раз и пользуйся.... |
| Автор: firelex 15.12.2003, 14:00 |
| Е-мое! Занес DC в переменную и все заработало... Спасибо |