![]() |
|
|
![]()
|
|
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
САБЖ. Нужно нарисовать линии заданным цветом. В помощь себе брал http://msdn.microsoft.com/library/default....evcons_34qa.asp, но что-то не получается в этой строке:
компилятор не может найти эту функцию. Вот. Как исправить? Или может более удобный метод есть? Это сообщение отредактировал(а) Fedor - 5.10.2005, 15:52 -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Можно так Добавлено @ 16:31 Контекст устройства и класс CDC. Существует много видов аппаратуры ( много различных видов принтеров и мониторов и т.п.). Само собой вывод информации на различные виды аппаратуры различен.Он существенно зависит от характеристик и методов работы с ними. Чтобы унифицировать вывод информации была разработана специальная структура . Её название - контекст устройства. С помощью неё осуществляется связь с аппаратурой и вывод данных. Для контекста устройства характерны 3 основных параметра: Шрифт - шрифт,которым будут выводиться данные. Кисть - для закрашивания. Перо - для рисования линий. В любой момент времени используется только лишь один экземпляр этих инструментов. Для работы с контекстом устройства предназначен класс CDC. В нем есть все те функции, которые понадобятся вам для работы. В нем скрыты все сложности работы с различным аппаратным обеспечением. Вам не понадобится изучать устройство каждого отдельного монитора. Вам нужно лишь создать объект класса CDC и работать через него. Генеалогия класса СDC: Этот класс напрямую наследуется от CObject. В принципе это довольно не характерно для классов,которые мы уже рассмотрели. Просмотрим его внутренности (мы рассмотрим не все функции этого класса,а лишь те которые нам понадобятся для написания программ в ближайщем будущем ): Создание CDC(); Конструктор класса. Создание CPen* SelectObject(CPen* pPen); CBrush* SelectObject(CBrush* pBrush); virtual CFont* SelectObject(CFont* pFont); CBitmap* SelectObject(CBitmap* pBitmap); int SelectObject(CRgn* pRgn); Выбирает новый объект в контекст устройства. Возвращаемое значение равно старому значению. Т.е. в зависимости от того какая функция вызывается заменяется соответствующий параметр, например кисть или шрифт. pPen - указатель на новое перо. pBrush - указатель на новую кисть. pFont - указатель на новый шрифт. pBitmap - указатель на новую битмапину. pRgn - указатель на новый регион (понятие региона будет введено позже). virtual CGdiObject* SelectStockObject(int nIndex); Выбирает новый объект в контекст устройства. Объект берется из числа предопределенных. Существуют преопределенные шрифты,кисти,перья ( карандаш ). В случае удачного завершения функции возвращаемое значение равно старому объекту или NULL в обратном случае. nIndex - определяет предопределенный объект ( может принимать такие значения ): BLACK_BRUSH - черная кисть. DKGRAY_BRUSH - темно-серая кисть. GRAY_BRUSH - серая кисть. HOLLOW_BRUSH - пустая ( прозрачная кисть ). LTGRAY_BRUSH - светло-серая кисть. NULL_BRUSH - то же самое,что и HOLLOW_BRUSH. WHITE_BRUSH - белая кисть. BLACK_PEN - черный карандаш. NULL_PEN - пустой ( прозрачный карандаш ). WHITE_PEN - белый карандаш. ANSI_FIXED_FONT - непропорциональный системный шрифт ANSI. ANSI_VAR_FONT - пропорциональный системный шрифт ANSI. DEVICE_DEFAULT_FONT - шрифт, зависящий от устройства. OEM_FIXED_FONT - непропорциональный шрифт OEM. SYSTEM_FONT - системный шрифт, используемый по умолчанию для отображения пунктов меню и т.п. Пропорциональный. SYSTEM_FIXED_FONT - непропорциональный системный шрифт, используется для совместимости с предыдущими версиями Windows. DEFAULT_PALETTE - основная палитра, в которой 20 цветов. virtual COLORREF SetBkColor(COLORREF crColor); Устанавливает новый цвет заднего фона. Возвращаемое значение - предыдущий цвет фона. Если происходит ошибка вернется - 0x80000000. crColor - значение нового цвета в форме RGB. virtual COLORREF SetTextColor(COLORREF crColor); Устанавливает новый цвет для текста. Возвращаемое значение - предыдущий цвет текста. crColor - значение нового цвета в форме RGB. Карандаш. Класс CPen Генеалогия Представленный ниже класс представляет графический объект Windows - "карандаш". Карандаш используется для рисования линий и контуров объектов. К слову, в Windows имеется целый набор различных предопределенных стилей, свойств и типов, которые способствуют простому и эффективному использованию карандашей и, соответственно, рисованию самых разнообразных линий. Создание CPen( ); // Конструктор по умолчанию CPen( int nPenStyle, int nWidth, COLORREF crColor ); // nPenStyle - стиль карандаша: // PS_SOLID - сплошная линия; // PS_DASH - длинные штрихи, толщина которых <= 1 (в единицах // устройства); // PS_DOT - короткие штрихи, толщина которых <= 1 (в единицах // устройства); // PS_DASHDOT - штрих-пунктир, толщина которых <= 1 (в единицах // устройства); // PS_DASHDOTDOT - двойной штрих-пунктир, толщина которых <= 1 // (в единицах устройства); // PS_NULL - "невидимая" линия; // PS_INSIDEFRAME - сплошная линия для рисования по внутренней границе // замкнутой области, например, при использовании функций класса CDC // Rectangle, Ellipse и т. д.; при использовании карандаша данного типа // для рисования линий, например, с помощью функции LineTo, результат // будет тем же, что и для стиля PS_SOLID; еще одна область применения // данного стиля - создание карандашей толщиной более одного пикселя и // имеющих цвет, недоступный для текущего устройства; в этом случае // линии будут состоять из пикселей доступных цветов, совокупность // которых будет наиболее близко соответствовать заданному цвету. // nWidth - толщина линии, если 0, то ширина линии в единицах устройства // всегда будет равна одному пикселю. // crColor - цвет линии. Инициализация BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor ); // Создает карандаш (значения параметров функции см. соответствующий // конструктор). Функция возвращает истину в случае успешного завершения. Кисть. Класс CBrush Генеалогия Представляемый класс инкапсулирует графический объект Windows - "кисть". Данный объект служит, прежде всего, для закрашивания замкнутых фигур. Кисти бывают однотонные (сплошные), со штриховкой или созданные на основе шаблона. Создание CBrush( ); // Конструктор по умолчанию CBrush( COLORREF crColor ); // Параметр служит для задания цвета кисти. CBrush( int nIndex, COLORREF crColor ); // nIndex - задает стиль штриховки: // HS_BDIAGONAL - 45-градусная штриховка слева направо и сверху вниз; // HS_CROSS - горизонтальная и вертикальная штриховка крест-накрест; // HS_DIAGCROSS - 45-градусная штриховка крест-накрест; // HS_FDIAGONAL - 45-градусная штриховка слева направо и снизу вверх; // HS_HORIZONTAL - горизонтальная штриховка; // HS_VERTICAL - вертикальная штриховка. // crColor - цвет штриховки. CBrush( CBitmap* pBitmap ); // pBitmap - адрес битового массива (картинки), на основе которого // создается кисть. Картинку необходимо предварительно загрузить. // Причем картинка должна иметь размер более 8х8 пикселей. Инициализация BOOL CreateSolidBrush( COLORREF crColor ); // Создание сплошной (однотонной) кисти заданного цвета. // В случае успешного завершения функция возвращает истину. BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); // Создание кисти со штриховкой заданного цвета (см. соответствующий // конструктор). В случае успешного завершения функция возвращает истину. BOOL CreatePatternBrush( CBitmap* pBitmap ); // Создание кисти на основе шаблона (битового массива). // В случае успешного завершения функция возвращает истину. BOOL CreateSysColorBrush( int nIndex ); // Создание кисти на основе системного цвета. // В случае успешного завершения функция возвращает истину. Примечание: за более полной информацией обращайтесь в MSDN. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Благодарю
Добавлено @ 17:17 Coocky а вот такой вопрос: а нужно потом уничтожать эти объекты CPen или не обязательно? -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Coocky |
|
||||||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Да...
Добавлено @ 17:22 Или так можно
Это сообщение отредактировал(а) Coocky - 5.10.2005, 17:22 -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
||||||
|
|||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Coocky, это же не одно и то же.
Необходимо производить обе операции - сначала отцепить перо от контекста (выбрав другое), потом уничтожить. Правда, вторая операция выполняется неявно в деструкторе CPen. Причем следует иметь в виду: если удалить перо, выбранное в этот момент в контекст, будет утечка GDI-ресурсов. Так что повнимательнее с этим. А CPen::DeleteObject() имеет смысл вызывать только если ты хочешь повторно использовать объект CPen для другого пера... иначе MFC орет. -------------------- ... |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Я забыл сказать, что pDC->SelectObject(p_pen);-обязательно
а pen.DeleteObject();, делается перед созданием другого пера, иначе -debuge Пардон -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Е-мае
В общем, чтоб бы я ни делал, линии в любом случае рисуются черным. Цвет не меняется. Может ли это быть какая-то стандартная проблема? Типа что нужно заранее в DC или в CChildWindow указать что-то? -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
А как ты сейчас делаешь?
-------------------- Подпись больше не нужна |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
О, сорри. Все заработало. Был прикол с некорректным удалением объектов CPen. Я то удалял, то не удалял, в итоге лажа возникала.
-------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
-------------------- Подпись больше не нужна |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |