Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Структура программы.
Объект приложения (ОП) запускает программу, создаёт главное окно, размещает его на экране, организует передачу сообщений Windows.
Объект главного окна (CMainFrame) содержит меню, заголовок окна, строку состояния и клиентскую область.
Объект документа (CNameDoc) хранит данные и переменные.
Объект вида (CNameView) представляет окно, отображаемое поверх клиентской области, в которую выводятся текст или графическое изображение.
Создание простейшего приложения Windows.
1)Запустите Visual C++ Dev Studio. Выберете file/new. Далее следуйте указаниям мастера создания приложения. Выберете на вкладке Project - MFC AppWizard(exe), в поле Project name введите имя создаваемого проекта латинскими буквами ( в нашем примере имя - Name), в поле Location укажите папку для хранения вашего проекта.
На первом шаге создания приложения выберете тип создаваемого документа однодокументальный проект, многодокументальный проект или диалог (например, Single document).
На втором шаге выбирается уровень поддержки операций с базами данных. Выберете пункт по умолчанию.
На третьем шаге выбирается уровень поддержки операций с составными документами (None).
На четвёртом шаге выбираются опции, определяющие внешний вид пользовательского интерфейса.
На пятом шаге выбираются опции, которые нельзя было отнести по назначению ни к одному из предыдущих этапов. Здесь можно выбрать тип подключения библиотек: динамически и статически. Динамически связываемая библиотека представляет собой множество функций, используемых самыми разными приложениями. Использование DLL сокращает объём программы, но несколько усложняет установку продукта и ухудшает переносимость программы. Поэтому целесообразней подключать библиотеки статически.
И наконец последний этап создания приложения - подтверждение имён классов и имён файлов, которые создаёт для Вас AppWizard. Нажмите Finish.
2) Создайте переменные-члены класса документа. Для этого нажмите правой кнопкой мыши в ClassView на CNameDoc и выберете пункт Add Member Variable. В поле Variable Type напишите CString, а в поле Variable Name задайте имя st.
3) Произведём инициализацию переменной st в конструкторе документа (CNameDoc), щёлкнув по нему 2 раза мышью, и записав st=”Hello!”.
4)Организовать отображение текущего состояния документа в CnameView с помощью метода OnDraw, записав в него:
void CNameView::OnDraw(CDC* pDC)
{
// Создание нового документа //
CNameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0,0,pDoc->st);
}
Теперь можно запускать программу, нажав на панели восклицательный знак.
Работа с пером.
Рисование в клиентской области осуществляется с помощью объекта перо, представителя класса CPen. Для этого необходимо:
CPen pen(PS_SOLID,x*2+1,RGB(0,0,255))
и передать его в контекст
CPen*oldPen=pDC->SelectObject(&pen);
pDC->MoveTo(20,20);
pDC->LineTo(20,400);
pDC->SelectObject(oldPen);}
Конструктору объекта CPen требуется 3 параметра:
1) Стиль линии : DS_DASH-штриховая линия, PS_DOT-пунктирная линия, PS_SOLID-сплошная
линия и др.
2) Толщина линии;
3) Цвет линии. В макросе RGB 3 параметра, соответственно для красной, зелёной и синей
составляющих цвета. Значения интенсивностей составляющих находятся в интервале от 0 до
255.Если все компоненты равны нулю, то получим чёрный цвет, а если 255, то белый.
Пример программы:
void CNameView::OnDraw(CDC* pDC)
{
CPeroDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//Инициализировать положение линии//
UINT position=10;
//Начертить 16 линий//
for (UINT x=0; x<16;++x)
{ /Сформировать новое перо и выбрать его в контекст//
CPen pen (PS_SOLID,x*2+1,RGB(0,0,255));
CPen*oldPen=pDC->SelectObject(&pen); // Смотрите приложение
//Начертить линию новым пером//
position+=x*2+10;
pDC->MoveTo(20,position); // Смотрите приложение
pDC->LineTo(400,position); // Смотрите приложение
//Восстановить прежнее перо в контексте//
pDC->SelectObject(oldPen);} // Смотрите приложение
}
Работа с кистью.
Перо вычерчивает на экране линии заданной толщины. Кисть же закрашивает (заливает) внутреннюю область замкнутых фигур. Схема работы с кистью аналогична работе с пером. Рассмотрим пример, который будет демонстрировать как сплошные кисти, так и стандартные трафаретны, которые будут использованы для заливки прямоугольников.
Сплошная кисть - конструктор с одним аргументом, трафаретная кисть - конструктор с двумя аргументами.
В качестве первого аргумента двухаргументного конструктора можно использовать одну из перечисленных ниже констант или числа от 0 до 6:
HS_HORIZONTAL (горизонтальный)
HS_VERTICAL (вертикальный)
HS_CROSS (прямая клетка)
HS_FDIAGONAL (диагональный, наклон влево)
HS_BDIAGONAL (диагональный, наклон вправо)
HS_DIAGONALCROSS (косая клетка)
void CNameView::OnDraw(CDC* pDC)
{
CNameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//Инициализировать расположение прямоугольника//
UINT position=0;
//Выбрать перо для вычерчивания контура прямоугольника//
CPen pen(PS_SOLID,5,RGB(255,0,0));
CPen*oldPen=pDC->SelectObject(&pen);
for (UINT x=0; x<7; ++x) //Выбор стиля заливки//
{CBrush*brush; // Создание новой кисти //
if (x==6)
brush=new CBrush(RGB(0,255,0)); // Сплошная кисть //
else
brush=new CBrush(x,RGB(0,160,0)); // Со стилем заливки //
//Выбрать новую кисть в контекст//
CBrush*oldBrush=pDC->SelectObject(brush);
//Начертить прямоугольник//
position+=50;
pDC->Rectangle(20,position,400,position+40); // Смотрите приложение
//Восстановить контекст и стереть кисть//
pDC->SelectObject(oldBrush); // Смотрите приложение
delete brush;
}
//Восстановить прежнее перо в контексте//
pDC->SelectObject(oldPen); // Смотрите приложение
}
Работа со шрифтами.
Для работы со шрифтами необходимо сначала создать структуру, которая будет хранить информацию о формируемом в программе шрифте, попытаться его сформировать и затем работать с тем шрифтом, который получился в результате.
Шрифты Windows описываются в структуре LONGFONT, поля которой перечислены в таблице. Большинство из них может иметь значение 0 или значение по умолчанию - всё зависит от конкретной ситуации в приложении.
Поле |
Описание |
lfHeight |
Высота шрифта, логических единиц |
lfWidth |
Ширина шрифта, логических единиц |
lfEscapement |
Угол нанесения текста- угол между базовой линией текста и горизонталью (десятые доли градуса) |
lfOrientation |
Наклон символов (десятые доли градуса) |
lfWeight |
Толщина линий начертания шрифта, логических единиц |
lfItalic |
Ненулевое значение означает курсив |
lfUnderline |
Ненулевое значение означает подчёркивание |
lfStrikeOut |
Ненулевое значение означает перечёркнутый шрифт |
lfCharSet |
Номер набора символов шрифта-таблицы кодировки |
lfOutPrecision |
Параметр, определяющий соответствие запрашиваемого шрифта и имеющегося в наличии |
lfClipPrecision |
Параметр, определяющий способ “урезания” изображения литер при выходе их за пределы области ограниченного вывода. |
lfQuality |
Качество воспроизведения шрифта |
lfPitchAndFamily |
Определяет, будет ли шрифт иметь фиксированную или переменную ширину литер, а также семейство, к которому принадлежит шрифт |
lfFaceName |
Имя шрифта |
Значение логической единицы задаётся методом pDC->SetMapMode(MM_TEXT). Оно задано по умолчанию.
Соответствие между режимом наклонения и значением логической единицы приведены в таблице.
Режим |
Логическая единица |
MM_HIENGLISH |
0,001 дюйма |
MM_HIMETRIC |
0,01 мм |
MM_ISOTROPIC |
Произвольное |
MM_LOENGLISH |
0,01 дюйма |
MM_LOMETRIC |
0,1 мм |
MM_TEXT |
Пиксель устройства |
MM_TWIPS |
1/1440 дюйма |
Наклон текста относится к случаю, когда текст располагается на негоризонтальной базовой линии.
Толщина шрифта есть параметр, характеризующий некоторым опосредованным образом толщину контурных линий литер. Для этого поля определён набор констант: FW_THIN, FW_BOLD,FW_MEDIUM и др.
Существует 4 возможных варианта набора символов шрифта : ANSI_CHARSET,OEM_CHARSET,SYMBOL_CHARSET,UNICODE_CHARSET.
Для полей точности обычно используются значения по умолчанию (OUT_DEFAULT_PRECIS и CLIP_DEFAULT_PRECIS).
Ширина литер и семейство задаются битовыми константами VARIABLE/FF_ROMAN.
Имя шрифта задаётся копированием strcpy(logfont.lf.FaceName,”Courier”). Соответствие требуемого шрифта и контекста не всегда точно. Предоставляется шрифт наиболее близко подходящий.
Ниже приведён пример программы, которая иллюстрирует разнообразные шрифты:
void CNameView::OnDraw(CDC* pDC)
{
CNameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//Инициализация структуры LOGFONT//
LOGFONT logfont;
logfont.lfHeight=8;
logfont.lfWidth=0;
logfont.lfEscapement=0;
logfont.lfOrientation=0;
logfont.lfWeight=FW_NORMAL;
logfont.lfItalic=0;
logfont.lfUnderline=0;
logfont.lfStrikeOut=0;
logfont.lfCharSet=ANSI_CHARSET;
logfont.lfOutPrecision=OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
logfont.lfQuality=PROOF_QUALITY;
logfont.lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;
strcpy(logfont.lfFaceName,"Times New Roman");
//Инициализация расположения текста в поле окна//
UINT position=0;
//Сформировать и вывести на экран 8 примеров шрифтов//
for (UINT x=0; x<8; ++x)
{//Установить новую высоту шрифта//
logfont.lfHeight=16+(x*8);
//Создать новый шрифт и выбрать его в контекст//
CFont font;
font.CreateFontIndirect(&logfont);
CFont*oldFont=pDC->SelectObject(&font);
//Вывести текст новым шрифтом//
position+=logfont.lfHeight;
pDC->TextOut(20,position,"A sample font");
//Восстановить прежний текст в контексте//
pDC->SelectObject(oldFont); // Смотрите приложение
}
}
Работа с клавиатурой.
При нажатии на клавиши клавиатуры формируется сообщение WM_CHAR. Для обработки этого сообщения необходимо:
Например, будем выводить символы, набранные на клавиатуре.
Перед этим необходимо создать переменную st строкового типа, как приводилось ранее.
Void NView :: OnChar (UINT nChar; UINT nRepint; UINT nFlags)
{
CNDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// К созданной строке добавляем символ с клавиатуры nChar //
pDoc->st+ = nChar;
Invalidate();
}
После этого в функции OnDraw нужно вывести на экран строку st.
Кроме сообщения WM_CHAR ОС посылает сообщения WM_KEYDOUN и WM_KEYUP. ClassWizard может предоставить обработчики OnKeyDoun и OnKeyUp соответственно. Схема работы с ними такая же.
Работа с мышью.
Мышь может служить источником нескольких сообщений : WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MOUSEMOVE и т.д. Обработка этих сообщений производится с использованием ClassWizard. Рассмотрим работу на примере нажатия левой кнопки мыши. Пусть выводится созданная ранее строка в месте указанном мышью.
Предварительно необходимо создать две переменные x и y целого типа в классе CNView для начальных точек. Также создадим переменную st строкового типа и зададим ей значение.
После этого:
В ClassWizard создадим функцию OnLButtonDoWn обработчик сообщения WM_LBUTTONDOWN и отредактируем ее.
Void Nview :: OnLButtonDoWn (UINT nFlags; CPoint Point)
{
x = Point.x; // Задание начальных координат для вывода строки //
y = Point.y;
Invalidate();
}
После этого в функции OnDraw нужно вывести на экран строку st.
Редактирование меню.
Void NView :: OnPunkt1 ( )
{
CNameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->st = «Выбран пункт 1»;
Invalidate();
}
После этого в функции OnDraw нужно вывести на экран строку st.
На вкладке ресурсов выбрать Accelerator -> IDR_MAINFRAIM , найти идентификатор соответствующего пункта меню и задать сочетание клавиш.
Кнопки на панели инструментов.
Кнопки на панели инструментов создаются и связываются с кодом программы аналогично пунктам меню.
Блокировка и пометка пунктов меню.
Открыть ClassWizard, в списке ObjectIDS найти идентификатор нужного пункта меню. В окошке сообщений выбрать пункт UPDATE_COMMAND_UI и добавить функцию обработчика:
Void Nview :: OnUpdateNameMenu (CcmdUI *pCmdUI)
{
// Для блокировки пункта //
pCmdUI->Enable(false);
// для пометки пункта меню //
pCmdUI->Enable(true);
pCmdUI->SetCheck(1);
}
Диалоговые окна.
Для работы с новым диалогом выбрать имя класса в поле ClassWizard.
Для записи значения из элемента в переменную вызывается функция
ApdateData(True), а для записи из переменной в элемент ApdateData(False).
Флажки и переключатели.
Флажки и переключатели наследники класса CButton, то при работе с этими элементами можно использовать функции:
GetCheck () определяет состояние кнопки;
SetCheck () залает состояние кнопки;
SetIcon () задает значок, отображаемый на кнопке;
SetButtonStyle () задает стиль кнопки;
BS_CHECKBOX флажок с текстом справа,
BS_RADIOBUTTON переключатель с текстом справа,
BS_LEFTTEXT текст помещается слева,
BS_AUTOCHECKBOX флажок с автоматически изменяемым состоянием при выделении
пользователем
BS_AUTORADIOBUTTON - флажок с автоматически изменяемым состоянием при
выборе пользователем, остальные переключатели группы автоматически сбрасываются.
Кнопки можно создавать не только на диалоговых окнах, но и объявляя объект CButton и вызывая функцию Create в любом месте окна программы. В этом случае визуальный редактор диалогов не доступен, идентификатор элементов надо определять самим, схему обработку сообщений реализовать самим.
С переключателями и флажками можно работать как с обычными кнопками, т.е. связать событие BN_CLICKET с функцией обработчика.
1 Вариант :
1. ClassWizard;
2. В списке ObjectIDS выбрать IDC_CHECK1;
3. В списке Messages выбрать BN_CLICKET;
4. AddFunction;
5. Открыть вновь созданный метод
void Name :: OnCheck1()
{
m_text = “Выбран 1 ”;
UpdateData(false);
}
2 Вариант: предполагает связывание переключателей и флажков с переменными членами класса Dialog.
1. ClassWizard;
2. Выбрать идентификатор IDS_CHECK1 на вкладке MemberVariables;
3. AddVariable;
4. Задаем имя, связанное с элементом переменной m_C1 и выбираем тип bool;
5. Аналогично для второго флажка;
6. Для IDS_EDIT создать переменную m_text типа CString;
7. Для переключателей добавим функции обработки
void Name :: OnRadio1()
{
m_C1 = true;
m_C2 = false;
m_text = “Выбран 1”
UpdateData(false);
}
void Name :: OnRadio2()
{
m_C2 = true;
m_C1 = false;
m_text = “Выбран 2”
UpdateData(false);
}
Списки.
Для работы со списками определен класс CListBox с большим количеством методов:
AddString() добавляет строку в список;
DeleteString () удаляет строку из списка;
GetCurSel () получает индекс выбранной строки (индексы начинаются с нуля);
GetCount () количество строк в списке и др.
Рассмотрим пример: в элементе edit выводится выбранная строка из списка
CDialog :: OnInitDialog ()
{ m_list.AddString (“Выбран 01”);
m_list.AddString (“Выбран 02”);
…
m_list.AddString (“Выбран 12”);
}
По умолчанию список сортируется, чтобы убрать сортировку Свойства->Стиль->Sort снять флажок.
void Name :: OnDblClickList1()
{ m_list.GetText (m-list.GetCurSel(); m_text);
UpdateData(false);
}
Приложение.
Методы класса CDC.
Конструктор.
CDC :: CDC
Конструктор создает объект класса CDC.
CDC ();
Методы Инициализации.
CDC :: DeleteDC
Этот метод удаляет контексты устройства, которые связаны с m_hDC свойством в объекте CDC. Если этот объект CDC - последний активный контекст для указанного устройства, устройство уведомлено и вся память и системные ресурсы, используемые устройством освобождаются. Вообще, можно не вызывать этот метод, т.к. деструктор делает это.
BOOL DeleteDC ();
Возвращаемое значение отлично от нуля, если удаление контекста закончено успешно; иначе - равно нулю
CDC :: GetCurrentBitmap
Этот метод восстанавливает указатель на выбранный объект CBitmap. Этот метод может возвратить временные объекты.
CBitmap* GetCurrentBitmap ()
const;
Возвращаемое значение - указатель на объект CBitmap, если завершен успешно; иначе - ноль.
CDC :: GetCurrentBrush
Этот метод восстанавливает указатель на выбранный объект CBrush. Этот метод может возвратить временные объекты.
CBrush* GetCurrentBrush ()
const;
Возвращаемое значение - указатель на объект CBrush, если завершен успешно; иначе - ноль.
CDC:: GetCurrentFont
Этот метод восстанавливает указатель на выбранный объект CFont. Этот метод может возвратить временные объекты.
CFont* GetCurrentFont ()
const;
Возвращаемое значение - указатель на объект CFont, если завершен успешно; иначе - ноль.
CDC:: GetCurrentPen
Этот метод восстанавливает указатель на выбранный объект CPen. Этот метод может возвратить временные объекты.
CPen* GetCurrentPen ()
const;
Возвращаемое значение - указатель на объект CPen, если завершен успешно; иначе - ноль.
CDC:: ReleaseAttribDC
Этот метод устанавливает компонент m_hAttribDC, атрибут контекста устройсмтва, на пустой указатель.
virtual void ReleaseAttribDC ();
CDC:: ReleaseOutputDC
Этот метод устанавливает m_hDC на пустой указатель.
virtual void ReleaseOutputDC ();
Замечание : этот метод нельзя вызывать, если контекст устройства вывода присоединен к объекту CDC.
Методы выбора.
CDC:: SelectObject
Этот метод выбирает объект для контекста устройства.
CPen* SelectObject ( CPen* pPen );
CBrush* SelectObject ( CBrush* pBrush );
virtual CFont* SelectObject ( CFont* pFont );
CBitmap* SelectObject ( CBitmap* pBitmap );
int SelectObject ( CRgn* pRgn );
CGdiObject* SelectObject ( CGdiObject* pObject );
Параметры
pPen - указатель на объект CPen.
pBrush - указатель на объект CBrush.
pFont - указатель на объект CFont.
pBitmap - указатель на объект CBitmap.
pRgn - указатель на объект CRgn.
pObject - указатель на объект CGdi.
Возвращаемое значение - указатель на заменяемый объект. Это - указатель на объект одного из классов, в зависимости от того, какая функция используется. Возвращаемое значение является нулевым (пустым), если есть ошибка. Эта функция может возвратить указатель на временный объект.
Замечания
Выбранный объект заменяет предыдущий объект того же самого типа. Например, если pObject общей версии SelectObject указывает на объект CPen, метод заменяет текущее перо пером, указанным pObject.
CDC:: SelectStockObject
Этот метод выбирает объект CGdiObject, который соответствует предопределенному готовому перу, кисти, или шрифту.
virtual CGdiObject* SelectStockObject (
int nIndex);
Параметры
nIndex -вид готового объекта. Это может быть одно из следующих значений:
Возвращаемое значение - указатель на объект CGdiObject, который заменен, если функция выполнена успешно. Фактический объект указателя - CPen, CBrush, или CFont. Если запрос неудачен, возвращаемое значение является нулевым (пустым).
Методы параметров рисунка.
CDC:: GetBrushOrg
Этот метод возвращает начало координат кисти, выбранной в контекст устройства.
CPoint GetBrushOrg ()
const;
Возвращаемое значение - начало координат кисти, как объект CPoint.
Замечание : начальное значение координат кисти - (0,0) в клиентской области. Возвращаемое значение определяет точку относительно начала координат окна монитора.
CDC:: SetBrushOrg
Этот метод определяет начало координат для следующей кисти, выбранной в контекст устройства.
CPoint SetBrushOrg (
int x,
int y);
CPoint SetBrushOrg (
POINT point);
Параметры :
x : х-координата нового начала координат. Это значение должно быть от 0 до 7.
y : y-координата нового начала координат. Это значение должно быть от 0 до 7.
point : x-и y-координаты нового начала координат. Каждое значение должно быть от 0 до 7. Можно передать структуру POINT или объект CPoint для этого параметра.
Возвращаемое значение - предыдущее начало координат кисти.
Замечание : заданные по умолчанию координаты кисти - (0, 0). Чтобы изменять начало координат кисти, вызовите функцию UnrealizeObject для объекта CBrush, вызовите SetBrushOrg, и затем вызовите метод SelectObject для выбора кисть в контекст устройства.
Не используйте SetBrushOrg для готовых объектов CBrush.
Методы цветовой палитры.
CDC:: GetHalftoneBrush
Этот метод возвращает полутоновую кисть. Полутоновая кисть - кисть, которая рисует приоритетным и фоновыми пикселами поочередно.
static CBrush* PASCAL GetHalftoneBrush ();
Возвращаемое значение - eказатель на объект CBrush, если завершено успешно; иначе ноль.
CDC:: GetNearestColor
Этот метод отыскивает сплошной цвет, который лучше соответствует указанному логическому цвету. Указанное устройство должно быть способно отобразить этот цвет.
COLORREF GetNearestColor (
COLORREF crColor )
const;
Параметры
crColor - цвет, который будет вызван.
Возвращаемое значение - RGB (красный, зеленый, синий) составляющие цвета, которые определяют цвет, наиболее близкий к значению crColor и который устройство может отобразить.
Методы атрибутов рисунка.
CDC:: GetBkColor
Этот метод возвращает цвет фона.
COLORREF GetBkColor ()
const;
Возвращаемое значение - RGB составляющие цвета.
CDC:: SetBkColor
Этот метод устанавливает цвет фона на указанный цвет.
virtual COLORREF SetBkColor (
COLORREF crColor );
Параметры
crColor - новый цвет фона.
Возвращаемое значение - предыдущий цвет фона как RGB составляющие цвета. Если возникает ошибка, то возвращаемое значение - 0x80000000.
CDC:: GetBkMode
Этот метод возвращает фоновый режим.
int GetBkMode ()
const;
Возвращаемое значение - фоновый режим, который может быть непрозрачным или прозрачным.
CDC:: SetBkMode
Этот метод устанавливает фоновый режим.
int SetBkMode (
int nBkMode );
Параметры
nBkMode - режим для установки. Этот параметр может быть одним из следующих значений:
Возвращаемое значение - предыдущий фоновый режим.
CDC:: SetROP2
Этот метод устанавливает режим рисунка.
int SetROP2 (
int nDrawMode );
Параметры
nDrawMode - новый режим рисунка. Это может быть любое из следующих значений:
Возвращаемое значение - предыдущий режим рисунка.
Замечание
Режим рисунка устанавливается только для растровых устройств, это не применяется к векторным устройствам. Рисующие режимы - двойные коды растровой операции, представляющие все возможные Булевские комбинации двух переменных, используя двойные операторы И, ИЛИ, неэквивалентность (исключительные ИЛИ), и операцию NOT.
CDC:: GetTextColor
Этот метод возвращает цвет текста. Текстовый цвет - цвет символа текста.
COLORREF GetTextColor ()
const;
Возвращаемое значение - еекущий цвет текст как RGB составляющие цвета.
CDC:: SetTextColor
Этот метод задает цвет текста.
virtual COLORREF SetTextColor (
COLORREF crColor );
Параметры
crColor - цвет текста как RGB составляющие цвета.
Возвращаемое значение RGB предыдущего текстового цвета.
Замечание
Если устройство не может представить указанный цвет, система устанавливает текстовый цвет на самый близкий. Цвет фона для символа определен SetBkColor и SetBkMode методами.
Растровые методы.
CDC:: GetPixel
Этот метод возвращает RGB составляющие цвета пиксела в точке, указанной x и y.
COLORREF GetPixel (
int x,
int y)
const;
COLORREF GetPixel (
POINT point)
const;
Параметры
x - Логическая x-координата точки исследования.
y - Логическая y-координата точки исследования.
Point - логические x-и y-координаты точки исследования.
Возвращаемое значение - RGB составляющие цвета точки, или -1, если координаты не определяют точку в области отсечения.
Замечания
Точка должна быть в области отсечения. Если точка не находится в области отсечения, функция не имеет никакого результата и возвращается -1.
Не все устройства поддерживают функцию GetPixel. Для получения дополнительной информации, см. RC_BITBLT растровую возможность под GetDeviceCaps методом.
CDC:: SetPixel
Этот метод устанавливает точке цвет, указанный в crColor.
COLORREF SetPixel (
int x,
int y,
COLORREF crColor );
COLORREF SetPixel (
POINT point,
COLORREF crColor);
Параметры
x - Логическая x-координата точки.
y - Логическая y-координата точки.
crColor - RGB значение, которое определяет цвет. Чтобы создавать номер цвета, используйте макрокоманду RGB. Чтобы извлекать индивидуальные значения для красных, зеленых, и синих компонентов номера цвета, используйте GetRValue, GetGValue, и GetBValue макрокоманды соответственно.
Point - Логические x-и y-координаты точки. Вы можете передать структуру POINT или объект CPoint для этого параметра.
Возвращаемое значение - RGB цвет, в который фактически окрашена точка. Если точка вне области отсечения , тов озвращаемое значения --1.
CDC:: MaskBlt
Этот метод комбинирует цвета для адресата, используя указанную маску и растровую операцию.
BOOL MaskBlt (
int x,
int y,
int nWidth ,
int nHeight,
CDC* pSrcDC ,
int xSrc ,
int ySrc,
CBitmap& maskBitmap ,
int xMask ,
int yMask ,
DWORD dwRop );
Параметры
x - Логическая x-координата левого верхнего угла прямоугольника адресата.
y - Логическая y-координата левого верхнего угла прямоугольника адресата.
nWidth - Ширина, в логических единицах, прямоугольника адресата и исходного точечного рисунка.
nHeight - Высота, в логических единицах, прямоугольника адресата и исходного точечного рисунка.
pSrcDC - Идентифицирует контекст устройства, с которого точечный рисунок должен быть скопирован. Должно быть нулевым, если dwRop параметр определяет растровую операцию, которая не включает источник.
xSrc - Логическая x-координата левого верхнего угла исходного точечного рисунка.
ySrc - Логическая y-координата левого верхнего угла исходного точечного рисунка.
maskBitmap - Идентифицирует одноцветный точечный рисунок маски, объединенный с цветным точечным рисунком в исходном контексте устройства.
xMask - Горизонтальное смещение пиксела для точечного рисунка маски, указанного maskBitmap параметром.
yMask - Вертикальное смещение пиксела для точечного рисунка маски, указанного maskBitmap параметром.
dwRop - Определяет приоритетные и фоновые троичные растровые коды операции, которые функция использует, чтобы управлять комбинацией данных адресата и источника. Фоновый растровый код операции сохранен в старшем байте высокого слова этого значения. Приоритетный растровый код операции сохранен в младшем байте высокого слова этого значения. Низкое слово этого значения игнорируется, и должно быть нулевым.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Методы отсечения.
CDC:: ExcludeClipRect
Этот метод создает новую область отсечения, которая состоит из существующей области отсечения минус указанный прямоугольник.
int ExcludeClipRect (
int x1,
int y1,
int x2,
int y2);
virtual int ExcludeClipRect (
LPCRECT lpRect);
Параметры
x1 - x-координата левого верхнего угла прямоугольника.
y1 - y-координата левого верхнего угла прямоугольника.
x2 - x-координата нижнего правого угла прямоугольника.
y2 - y-координата нижнего правого угла прямоугольника.
lpRect - прямоугольник, также может быть объект CRect.
Возвращаемое значение - тип новой области отсечения. Это может быть любое из следующих значений:
CDC:: ExcludeUpdateRgn
Этот метод запрещает рисование в пределах недопустимых областей окна исключением модифицированной области из области отсечения, связанной с объектом CDC.
int ExcludeUpdateRgn (
CWnd* pWnd );
Параметры
pWnd - указатель на окно объекта, которое будет модифицироваться.
Возвращаемое значение - тип исключенной области. Это может быть любое из следующих значений:
CDC:: GetClipBox
Этот метод возвращает измерения самого плотно ограниченного прямоугольника вокруг границы отсечения. Измерения скопированы в буфер, на который указывает lpRect.
virtual int GetClipBox (
LPRECT lpRect )
const;
Параметры
lpRect - указатель на структуру RECT или объект CRect, который должен получить измерения прямоугольника.
Возвращаемое значение - Тип области отсечения. Это может быть любое из следующих значений:
CDC:: IntersectClipRect
Этот метод создает новую область отсечения, формируя пересечение текущей области и прямоугольника, указанного x1, y1, x2, и y2.
int IntersectClipRect (
int x1 ,
int y1 ,
int x2 ,
int y2 );
int IntersectClipRect (
LPCRECT lpRect );
Параметры
x1 - x-координата левого верхнего угла прямоугольника.
y1 - y-координата левого верхнего угла прямоугольника.
x2 - x-координата нижнего правого угла прямоугольника.
y2 - y-координата нижнего правого угла прямоугольника.
lpRect - прямоугольник, также может быть объект CRect или структура LPRECT.
Возвращаемое значение - тип новой области отсечения. Это может быть любое из следующих значений:
CDC:: OffsetClipRgn
Этот метод перемещает область отсечения контекста устройства c указанными смещениями. Метод перемещает область на x единиц по оси X и y единиц по оси Y.
int OffsetClipRgn (
int x,
int y);
int OffsetClipRgn (
SIZE size);
Параметры
x количество логических единиц для сдвига влево и вправо;
y - количество логических единиц для сдвига вверх и вниз.
Size - величина смещения.
Возвращаемое значение - тип новой области отсечения. Это может быть любое из следующих значений:
CDC:: RectVisible
Этот метод определяет, находится ли любая часть указанного прямоугольника в пределах области отсечения контекста экрана.
virtual BOOL RectVisible (
LPCRECT lpRect )
const;
Параметры
lpRect - указатель на структуру RECT или объект CRect, который содержит логические координаты указанного прямоугольника.
Возвращаемое значение - отлично от нуля, если любая часть данного прямоугольника находится в пределах области отсечения; иначе - нулевое
Методы рисования линии.
CDC:: GetCurrentPosition
Этот метод возвращает текущую позицию, в логических координатах. Текущая позиция может быть установлена с помощью метода MoveTo.
CPoint GetCurrentPosition ()
const;
Возвращаемое значение - Текущая позиция как объект CPoint.
CDC:: MoveTo
Этот метод перемещает текущую позицию в указанные x и y, или point.
CPoint MoveTo (
int x,
int y);
CPoint MoveTo (
POINT point);
Параметры
x - логическая x-координата новой позиции.
y - логическая y-координата новой позиции.
Point - Новая позиция, можно передать структуру POINT или объект CPoint для этого параметра.
Возвращаемое значение x-и y-координаты предыдущей позиции как объект CPoint.
CDC:: LineTo
Этот метод рисует строку от текущей позиции до координат x и y или point. Линия нарисована выбранным пером. Текущая позиция установлена в x, y или point.
BOOL LineTo (
int x,
int y);
BOOL LineTo (
POINT point);
Параметры
x - логическая x-координата конечной точки линии.
y - логическая y-координата конечной точки линии.
Point - конечная точка для линии, можно передать структуру POINT или объект CPoint для этого параметра.
Возвращаемое значение - Отлично от нуля, если линия нарисована; иначе - нулевое.
CDC:: Polyline
Этот метод рисует набор линии, соединенных точками, указанными в lpPoints. Линии нарисованы от первой точки до последней, указанным перорм.
BOOL Polyline (
LPPOINT lpPoints,
int nCount );
Параметры
lpPoints - Указатель на массив структур POINT или объектов CPoint для соединения линий.
nCount - Количество точек в массиве. Это значение должно быть не менее двух.
Возвращаемое значение Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Замечание
В отличие от метода LineTo, метод Polyline не использует, и не модифицирует текущую позицию.
CDC:: PolyPolyline
Этот метод рисует множественный ряд связанных линий.
BOOL PolyPolyline (
const POINT* lpPoints,
const DWORD* lpPolyPoints ,
int nCount <>);
Параметры
lpPoints - Указатель на массив структур, который содержит вершину ломаных линий. Ломаные линии определены последовательно.
lpPolyPoints - Указатель на массив переменных, который определяет количество точек в массиве lpPoints для соответствующего многоугольника ( должно быть больше или равняться двум).
nCount - Общее количество графов в массиве lpPolyPoints.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
CDC:: PolylineTo
Этот метод рисует одину или более прямых линий.
BOOL PolylineTo (
const POINT* lpPoints ,
int nCount );
Параметры
lpPoints - Указатель на массив структур POINT, который содержит координаты линии.
nCount - Количество точек в массиве.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Замечание
Линия рисуется от текущей позиции до первой точки, указанной в lpPoints, используя текущее перо. Каждую последующую строку, функция рисует от конечной точки предыдущей линии к следующей точке, указанной в lpPoints. PolylineTo перемещает текущую позицию в конечную точку последней строки. Если линии формируют закрытый рисунок, то он ничем не заполняется.
Методы простых рисунков.
CDC:: Draw3dRect
Этот метод рисует трехмерный прямоугольник: верхние и левые грани цветом, указанным в clrTopLeft ; основание и правые грани цветом, указанном в clrBottomRight.
void Draw3dRect (
LPCRECT lpRect ,
COLORREF clrTopLeft,
COLORREF clrBottomRight);
void Draw3dRect (
int x,
int y,
int cx,
int cy,
COLORREF clrTopLeft ,
COLORREF clrBottomRight );
Параметры
lpRect - Ограничительный прямоугольник в логических единицах, можно передать указатель на структуру RECT или объект CRect для этого параметра.
clrTopLeft - Цвет верхних и левых сторон трехмерного прямоугольника.
clrBottomRight - Цвет основания и правых сторон трехмерного прямоугольника.
x - Логическая x-координата левого верхнего угла трехмерного прямоугольника.
y - Логическая y-координата левого верхнего угла трехмерного прямоугольника.
cx - Ширина трехмерного прямоугольника.
cy - Высота трехмерного прямоугольника.
Пример
void CMyView:: OnDraw (CDC* pDC)
{
// Выделить клиентскую область.
CRect rect;
GetClientRect (rect);
// Сократить область на 20 пикселов со всех сторон.
rect. DeflateRect (20, 20);
// Рисовать прямоугольник с красными верхними и левыми сторонами, и
// зелеными правыми стороны и основанем.
pDC-> Draw3dRect (rect, RGB (255, 0, 0), RGB (0, 255, 0));
// Те же действия, но более громоздко и неудобно :
// pDC-> Draw3dRect(rect.left, rect.top, rect.Width (), rect.Height (),
// RGB (255, 0, 0), RGB (0, 255, 0));
}
CDC:: DrawDragRect
Этот метод вызывают неоднократно, чтобы нарисовать перемещенный прямоугольник.
void DrawDragRect (
LPCRECT lpRect ,
SIZE size,
LPCRECT lpRectLast ,
SIZE sizeLast,
CBrush* pBrush = NULL,
CBrush* pBrushLast = NULL);
Параметры
lpRect - Указатель на структуру RECT или объект CRect, который определяет логические координаты прямоугольника - в этом случае, конечная позиция рисуемого прямоугольника.
Size - Смещение от верхнего левого угла внешней границы к левому верхнему углу внутренней границы то есть толщина границы - прямоугольника.
lpRectLast -Указатель на структуру RECT или объект CRect, который определяет логические координаты позиции прямоугольника - в этом случае, начальная позиция рисуемого прямоугольника.
sizeLast - Смещение от левого верхнего угла внешней границы к левому верхнему углу внутренней границы то есть толщина границы начального рисуемого прямоугольника.
pBrush - Указатель на объект кисти. Установленный в NULL, чтобы использовать заданную по умолчанию полутоновую кисть.
pBrushLast - Указатель на последний используемый объект кисти. Установленный в NULL, чтобы использовать заданную по умолчанию полутоновую кисть.
Замечания
В первый раз, когда Вы вызываете DrawDragRect, параметр lpRectLast должен быть = NULL.
CDC:: DrawEdge
Этот метод рисует грани прямоугольника в указанном стиле.
BOOL DrawEdge (
LPRECT lpRect ,
UINT nEdge ,
UINT nFlags );
Параметры
lpRect - Указатель на структуру RECT, которая содержит логические координаты прямоугольника.
nEdge - Тип внутреннего и внешнего края для рисования. Этим параметром должна быть комбинация одного флажка внутренней границы и одного флажка внешней границы.
nFlags - Флажки, которые определяют тип границы рисования. Для диагональных строк, флажки BF_RECT определяют конечную точку вектора, ограниченного параметром прямоугольника.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
CDC:: DrawIcon
Этот метод рисует значок на устройстве, представленном объектом CDC.
BOOL DrawIcon (
int x,
int y,
HICON hIcon );
BOOL DrawIcon (
POINT point,
HICON hIcon);
Параметры
x - логическая x-координата левого верхнего угла значка.
y - логическая y-координата левого верхнего угла значка.
hIcon - Идентифицирует маркер значка, чтобы рисовать.
Point - Логическиt x-и y-координаты левого верхнего угла значка. Вы можете передать структуру POINT или объект CPoint для этого параметра.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Замечания
Функция размещает левый верхний угол значка положении, указанном x и y. Ресурс значка должен быть предварительно загружен, используя функции CWinApp:: LoadIcon, CWinApp:: LoadStandardIcon, или CWinApp:: LoadOEMIcon. MM_TEXT режим отображения должен быть выбран перед использованием этой функции.
CDC:: FillRect
Этот метод заполняет указанный прямоугольник, используя указанную кисть. Метод заполняет законченный прямоугольник, включая левые и верхние границы, но это не заполняет правые границы и основание.
void FillRect (
LPCRECT lpRect ,
CBrush* pBrush );
Параметры
lpRect - Указатель на структуру RECT, которая содержит логические координаты прямоугольника. Вы можете также передать объект CRect для этого параметра.
pBrush - Идентифицирует кисть для заполнения прямоугольника.
CDC:: FillSolidRect
Этот метод заполняет указанный прямоугольник указанным сплошным цветом.
пусто FillSolidRect (
LPCRECT lpRect ,
COLORREF clr);
пусто FillSolidRect (
int x,
int y,
int cx ,
int cy ,
COLORREF clr);
Параметры
lpRect - Ограничительный прямоугольник в логических единицах. Вы можете передать указатель на структуру RECT данных или объект CRect для этого параметра.
Clr - Цвет для заполнения прямоугольника.
x - Логическая x-координата левого верхнего угла прямоугольника.
y - Логическая y-координата левого верхнего угла прямоугольника .
cx - Ширина прямоугольника.
cy - Высота прямоугольника.
Замечание
FillSolidRect подобен CDC:: FillRect. Однако, FillSolidRect использует только сплошные цвета, обозначенные параметром COLORREF, в то время как FillRect берет кисть и поэтому может использовать твердый цвет, размытый цвет, заштрихованную кисть, или образец. FillSolidRect обычно быстрее чем FillRect.
Когда Вы вызываете FillSolidRect, цвет фона, который был предварительно установлен, используя SetBkColor, установливается в цвет, обозначенный clr.
CDC:: FrameRect
Этот метод рисует границу вокруг прямоугольника, указанного lpRect.
void FrameRect (
LPCRECT lpRect ,
CBrush* pBrush );
Параметры
lpRect - Указатель на структуру RECT или объект CRect, который содержит логические координаты левых верхних и нижних правых углов прямоугольника. Вы можете также передать объект CRect для этого параметра.
pBrush - Идентифицирует кисть.
Замечание
Метод использует данную кисть, чтобы рисовать границу. Ширина и высота границы - всегда 1 логическая единица.
CDC:: InvertRect
Этот метод инвертирует содержание указанного прямоугольника.
void InvertRect (
LPCRECT lpRect );
Параметры
lpRect - Указатель на RECT, который содержит логические координаты прямоугольника, чтобы инвертировать. Вы можете также передать объект CRect для этого параметра.
Замечания
Инверсия - логическая операция NOT и зеркально отражает биты каждого пиксела. На одноцветных дисплеях, функция делает белые пикселы черными и черные белыми пикселами. На цветных дисплеях, инверсия зависит от того, как цвета сгенерированы для дисплея. Запрос InvertRect дважды с тем же самым прямоугольником восстанавливает его предыдущие цвета.
Если прямоугольник пуст, ничто не рисуется.
Пример
// Инвертировать rect от 20,20 до 50,50.
CRect rect (20, 20, 50, 50);
pDC-> InvertRect (rect);
// Инвертирование снова восстанавливает нормальный цвет.
:: Sleep (1000);
pDC-> InvertRect (rect);
Методы рисования эллипса и многоугольника.
CDC:: DrawFocusRect
Этот метод рисует прямоугольник в стиле, указанном прямоугольником, имеющим фокус.
void DrawFocusRect (
LPCRECT lpRect );
Параметры
lpRect - Указатель на структуру RECT или объект CRect, который определяет логические координаты прямоугольника, чтобы рисовать.
CDC:: Ellipse
Этот метод рисует эллипс.
BOOL Ellipse (
int x1 ,
int y1 ,
int x2 ,
int y2 );
BOOL Ellipse (
LPCRECT lpRect );
Параметры
x1 - Логическая x-координата левого верхнего угла ограничительного прямоугольника эллипса.
y1 - Логическая y-координата левого верхнего угла ограничительного прямоугольника эллипса.
x2 - Логическая x-координата нижнего правого угла ограничительного прямоугольника эллипса.
y2 - Логическая y-координата нижнего правого угла ограничительного прямоугольника эллипса.
lpRect - Ограничительный прямоугольник эллипса. Вы можете также передать объект CRect для этого параметра.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Замечания
Центр эллипса - центр ограничительного прямоугольника, указанного x1, y1, x2, и y2, или lpRect. Эллипс рисуется текущим пером, и его внутренняя область заполнена текущей кистью.
Высота рисунка - y2 - y1, и ширина рисунка - x2 - x1.
Если или ширина или высота ограничительного прямоугольника являются нулевыми, никакой эллипс не рисуется.
CDC:: Polygon
Этот метод рисует многоугольник, состоящий из двух или больше точек, связанных линиями. Система закрывает многоугольник автоматически, рисуя линию от последней вершины до первой.
BOOL Polygon (
LPPOINT lpPoints ,
int nCount );
Параметры
lpPoints - Указатель на массив точек, которые определяют вершины многоугольника. Каждая точка в массиве - структура POINT или объект CPoint.
nCount - Количество вершины в массиве.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Пример
void CMyView:: OnDraw (CDC* pDC)
{
// Выделить клиентскую область.
CRect rect;
GetClientRect (rect);
// Рисовать сплошным синим пером.
CPen penBlue (PS_SOLID, 5, RGB (0, 0, 255));
CPen* pOldPen = pDC->SelectObject(&penBlue);
// Сплошная красная кисть.
CBrush brushRed (RGB (255, 0, 0));
CBrush* pOldBrush = pDC->SelectObject(&brushRed);
// Найти середины вершины, права, левого, и основания
// клиентской области. Они - вершина многоугольника.
CPoint запятые [4];
pts [0] .x = rect.left + rect. Width ()/2;
pts [0] .y = rect.top;
pts [1] .x = rect.right;
pts [1] .y = rect.top + rect. Height ()/2;
pts [2] .x = pts [0] .x;
pts [2] .y = rect.bottom;
pts [3] .x = rect.left;
pts [3] .y = pts [1] .y;
// Выбрать старые объекты.
pDC-> SelectObject (pOldPen);
pDC-> SelectObject (pOldBrush);
}
Этот метод создает два или больше многоугольника. Многоугольники могут быть бессвязными или перекрывать друг друга.
LPPOINT lpPoints ,
LPINT lpPolyCounts ,
int nCount );
Параметры
lpPoints - Указатель на массив структур POINT или объектов CPoint, которые определяют вершину многоугольников.
lpPolyCounts - Указатель на массив целых чисел, каждое из которых определяет количество точек в одном из многоугольников массива lpPoints.
nCount - Количество массивов в массиве lpPolyCounts. Это значение должно быть не менее двух.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Замечания
Каждый многоугольник, указанный в запросе к функции PolyPolygon должен быть закрыт. В отличие от многоугольников, созданных методом Polygon, многоугольники, созданные PolyPolygon не закрыты автоматически.
Функция создает два или больше многоугольника. Чтобы создавать единственный многоугольник, нужно использовать метод Polygon.
CDC:: PolyLine
Этот метод рисует набор линий, соединяющих точки, указанные в lpPoints. Линии нарисованы от первой точки до последующих точек, используя текущее перо.
BOOL PolyLine (
LPPOINT lpPoints ,
int nCount );
Параметры
lpPoints - Указатель на массив структур POINT или объектов CPoint для соединения линий.
nCount - Количество точек в массиве. Это значение должно быть не менее двух.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Замечания
В отличие от LineTo , метод PolyLine не использует и не модифицирует текущую позицию.
Этот метод рисует прямоугольник, используя текущее перо. Внутренняя область прямоугольника заполнена, используя текущую кисть.
int x1 ,
int y1 ,
int x2 ,
int y2 <>);
LPCRECT lpRect );
Параметры
x1 - X-координата левого верхнего угла прямоугольника, в логических единицах.
y1 - Y-координата левого верхнего угла прямоугольника, в логических единицах.
x2 - X-координата нижнего правого угла прямоугольника, в логических единицах.
y2 - Y-координата нижнего правого угла прямоугольника, в логических единицах.
lpRect - Прямоугольник в логических единицах. Вы можете передать объект CRect или указатель на структуру RECT для этого параметра.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Замечания
Высота прямоугольника - y2 - y1, и ширина прямоугольника - x2 - x1. И ширина и высота прямоугольника должны быть больше чем 2 логические единицы и меньше чем 32 767 логических единиц.
Пример
void CMyView:: OnDraw (CDC* pDC)
{
// Создать, и выбрать сплошную синюю кисть.
CBrush brushBlue (RGB (0, 0, 255));
CBrush* pOldBrush = pDC->SelectObject(&brushBlue);
// Создать, и выбрать сплошное, черное перо.
CPen penBlack;
penBlack. CreatePen (PS_SOLID, 3, RGB (0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&penBlack);
// Получить клиентскую область.
CRect rect;
GetClientRect (rect);
// Сократить область на20 пикселов с каждой стороны.
rect. DeflateRect (20, 20);
// Рисовать сплошной черный прямоугольник, заполненный синим.
pDC-> Прямоугольник (rect);
// Выбрать старые объекты.
pDC-> SelectObject (pOldBrush);
pDC-> SelectObject (pOldPen);
}
CDC:: RoundRect
Этот метод рисует прямоугольник с округленными углами, используя текущее перо. Внутренняя область прямоугольника заполнена, используя текущую кисть.
BOOL RoundRect (
int x1 ,
int y1 ,
int x2 ,
int y2 ,
int x3 ,
int y3 );
BOOL RoundRect (
LPCRECT lpRect ,
POINT point );
Параметры
x1 - X-координата левого верхнего угла прямоугольника, в логических единицах.
y1 - Y-координата левого верхнего угла прямоугольника, в логических единицах.
x2 - X-координата нижнего правого угла прямоугольника, в логических единицах.
y2 - Y-координата нижнего правого угла прямоугольника, в логических единицах.
x3 - Ширина эллипса для рисования округленных углов, в логических единицах.
y3 - Высота эллипса для рисования округленных углов, в логических единицах.
lpRect - Ограничительный прямоугольник в логических модулях. Вы можете передать объект CRect или указатель на структуру RECT для этого параметра.
Point - Координата point определяет ширину эллипса, чтобы рисовать округленные углы, в логических единицах. Y-координата point определяет высоту эллипса, чтобы рисовать округленные углы. Вы можете передать структуру POINT или объект CPoint для этого параметра.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
Замечания
Высота прямоугольника - y2 - y1, и ширина прямоугольника - x2 - x1. И ширина и высота прямоугольника должны быть больше чем 2 логические единицы и меньше чем 32 767 логических единиц.
Пример
void CMyView:: OnDraw (CDC* pDC)
{
// Создать, и выбрать сплошную синюю кисть.
CBrush brushBlue (RGB (0, 0, 255));
CBrush* pOldBrush = pDC->SelectObject(&brushBlue);
// Создать, и выбрать сплошное черное перо.
CPen penBlack;
penBlack. CreatePen (PS_SOLID, 3, RGB (0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&penBlack);
// Получить клиентскую область.
CRect rect;
GetClientRect (rect);
// Сократить область на 20 пикселов с каждой стороны.
rect. DeflateRect (20, 20);
// Рисовать толстый черный прямоугольник, заполненный синим
// углы округлились в радиусе 17 единиц.
pDC-> RoundRect (rect, CPoint (17, 17));
// Выбрать старые объекты.
pDC-> SelectObject (pOldBrush);
pDC-> SelectObject (pOldPen);
}
Текстовые методы.
CDC:: ExtTextOut
Этот метод пишет символьную строку в указанной прямоугольной области, используя выбранный шрифт. Прямоугольная область может быть непрозрачна - то есть заполнена цветом фона - и это может быть область отсечения.
virtual BOOL ExtTextOut (
int x,
int y,
UINT nOptions ,
LPCRECT lpRect ,
LPCTSTR lpszString,
UINT nCount ,
LPINT lpDxWidths );
BOOL ExtTextOut (
int x,
int y,
UINT nOptions ,
LPCRECT lpRect ,
consr CString& str ,
LPINT lpDxWidths );
Параметры
x - Логическая x-координата символьной ячейки для первого символа в указанной строке.
y - Логическая y-координата вершины символьной ячейки для первого символа в указанной строке.
nOptions - Тип прямоугольника. Этот параметр может быть один, два, или ни одно из следующих значений:
lpRect - Указатель на структуру RECT, которая определяет измерения прямоугольника. Этот параметр может быть NULL. Вы можете также передать объект CRect для этого параметра.
lpszString - Указатель на указанную символьную строку, чтобы рисовать. Вы можете также передать объект CString для этого параметра.
nCount - Число символов в строке.
lpDxWidths - Указатель на массив значений, которые указывают расстояние между началами координат смежных символьных ячеек. Например, lpDxWidths [i] логические модули отделяют начала координат символьной ячейки i и символьной ячейки i + 1. Если lpDxWidths является NULL, ExtTextOut использует значение по умолчанию, располагающее между символами.
str - Объект CString, который содержит указанные символы, чтобы рисовать.
Возвращаемое значение - Отлично от нуля, если функция выполнена успешно; иначе - ноль.
CDC:: DrawText
Этот метод форматирует текст в указанном прямоугольнике, разворачивая позиции табуляции в соответствующие пробелы; выравнивая текст слева, справа, или по центру данного прямоугольника; и ломающийся текст в строки, которые соответствуют в прямоугольнике. Тип форматирования определен nFormat.
virtual int DrawText (
LPCTSTR lpszString ,
int nCount ,
LPRECT lpRect ,
UINT nFormat );
int DrawText (
const CString& str,
LPRECT lpRect ,
UINT nFormat );
Параметры
lpszString - Указатель на строку. Если nCount -1, строка должна быть с нулевым символом в конце.
nCount - Число символов в строке.
lpRect - Указатель на структуру RECT или объект CRect, который содержит прямоугольник, в логических координатах, в том, который текст должен быть отформатирован.
str - Объект CString, который содержит указанные символы.
nFormat - Метод форматирования текста. Это может быть любая комбинация значений, описанных для uFormat параметра в DrawText. Объединение использует оператор OR.
Возвращаемое значение - Высота текста, если функция завершена успешно.
CDC:: GetTextFace
Этот метод копирует имя текущего шрифта в буфер. Имя шрифта скопировано как строка с нулевым символом в конце.
int GetTextFace (
int nCount ,
LPTSTR lpszFacename )
const;
int GetTextFace (
CString& rString )
const;
Параметры
nCount - Размер буфера, в байтах. Если имя шрифта более длинно чем число байтов, указанных этим параметром, имя усечено.
lpszFacename - Указатель на буфер для имени шрифта.
rString - Ссылка на объект CString.
Возвращаемое значение - Количество байтов, скопированных на буфер, не, включая закончившийся нулевой символ. Нулевое, если происходит ошибка.
ОП
CNameDoc
CMainFrame
CNameView