Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

1Запустите Visul C Dev Studio

Работа добавлена на сайт samzan.net:


Структура программы.

Объект приложения  (ОП) запускает программу, создаёт главное окно, размещает его на экране, организует передачу сообщений 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. Для этого необходимо:

  1.  Сформировать новое перо (pen – имя объекта)

CPen pen(PS_SOLID,x*2+1,RGB(0,0,255))

           и передать его в контекст

           CPen*oldPen=pDC->SelectObject(&pen);

  1.  Нарисовать линию.

pDC->MoveTo(20,20);

pDC->LineTo(20,400);

  1.  Вернуть старое значение пера контексту

            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. Для обработки этого сообщения необходимо:

  1.  Открыть ClassWizard (выбрать его в контекстном меню приложения);
  2.  Выбрать в списке «класс» CnameView;
  3.  Из списка сообщений выбрать WM_CHAR;
  4.  Добавить функцию обработчика, нажав кнопку AddFunction;
  5.  Выбрать созданную функцию в списке функций класса и нажать кнопку EditCod для ее редактирования;

 

Например, будем выводить символы, набранные на клавиатуре.

Перед этим необходимо создать переменную 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.

Редактирование меню.

  1.  На вкладке ResourceView найти пункт Menu и выбрать, найти идентификатор IDR_MAINFRAIM и выбрать. Появится редактор меню. Для добавления нового пункта в редакторе меню необходимо выбрать место и нажить клавишу Ins ( для удаления пункта - Del). Чтобы написать название пункта, в контекстном меню выбираем пункт «Свойства», в появившемся диалоговом окне свойств в поле Caption пишем имя пункта. Символ  ‘  перед буквой с имени делает ее клавишей ускоренного вызова при открытом меню. В поле ввода Promt можно указать подсказку, которая появляется в строке состояния при выборе пункта меню. Флажок Pop-up позволяет подключить дополнительно подменю.
  2.  Подключение кода программы к пункту меню (вывод заранее созданной строки при выборе пункта меню).                                                                                                                                            – открыть ClassWizard на вкладке MessageMeps;                                                                               - найти идентификатор соответствующего пункта меню;                                                                 - в списке сообщений выбрать COMMAND, добавить функцию обработчик в класс CNView.                                                                                                            

           Void NView :: OnPunkt1 (  )

           {

               CNameDoc* pDoc = GetDocument();

               ASSERT_VALID(pDoc);

            

              pDoc->st = «Выбран пункт 1»;

  

              Invalidate();      

           }

        После этого в функции OnDraw нужно вывести на экран строку st.

                                 

  1.  Подключение акселераторов – сочетание клавиш, которые позволяют выбрать пункт меню в любой момент.

На вкладке ресурсов выбрать Accelerator -> IDR_MAINFRAIM  , найти идентификатор соответствующего пункта меню и задать сочетание клавиш.

Кнопки на панели инструментов.

Кнопки на панели инструментов создаются и связываются с кодом программы аналогично пунктам меню.

  1.  Вкладка ресурсов ResourceView-> ToolBar -> IDR_MAINFRAIM. Появится редактор панели инструментов. Щелкнуть по пустой кнопке и нарисовать изображение, которое будет на вашей кнопке.
  2.  Свяжем кнопку с пунктом меню. Для перехода к свойствам кнопки, дважды щелкнуть на изображении. На диалоговой панели в поле ID выбрать идентификатор соответствующего пункта меню. В поле Promt указать подсказки, появляющиеся в строке состояния и «хинты»:  «Строка состояния» \n «хинт»

Блокировка и пометка пунктов меню.

Открыть ClassWizard, в списке ObjectIDS найти идентификатор нужного пункта меню. В окошке сообщений выбрать пункт UPDATE_COMMAND_UI и добавить функцию обработчика:

 Void  Nview :: OnUpdateNameMenu (CcmdUI *pCmdUI)

{

   // Для блокировки пункта //

     pCmdUI->Enable(false);

  //  для пометки пункта меню //

    pCmdUI->Enable(true);

    pCmdUI->SetCheck(1);  

}

Диалоговые окна.

  1.  Для добавления к программе диалогового окна выбрать Insert-> ресурс -> dialog -> new.    Появляется редактор диалогов с кнопками ОК и  Cancel, палитра компонентов управления. Добавить кнопку и поле ввода на картинку. По умолчанию окну присваивается идентификатор ресурса IDD_DIALOG1.   Диалог запускается  функцией, унаследованной от класса CDialogDoModal(). При закрытии диалога она возвращает константы IDOK и IDCancel.    После помещения элемента на окно диалога можно изменить его характеристики через свойства в контекстном меню.
  2.  Подключение диалога к программе.
    1.  Создать класс диалога:
      1.  ClassWizard -> AddClass -> NewClass.
      2.  В поле Name указать Dlg1.
      3.  Выбрать базовый класс CDialog

                        Для работы с новым диалогом выбрать имя класса в поле ClassWizard.

  1.  Связывание переменных с элементами диалога (пример для поля ввода)
    1.  ClassWizard
      1.  В списке ClassName выбрать Dlg1.
      2.  В списке ObjectID выбрать IDC_Edit1.
      3.  AddVariable.
      4.  В появившемся окне задать имя переменной, выбрать категорию Value, задать тип переменной.

                       Для записи значения из элемента в переменную вызывается функция  

                       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 выводится выбранная строка из списка

  1.  Инициализация списка

     CDialog :: OnInitDialog ()

           {  m_list.AddString (“Выбран 01”);

               m_list.AddString (“Выбран 02”);

               …

               m_list.AddString (“Выбран 12”);

            }

      По умолчанию список сортируется, чтобы убрать сортировку Свойства->Стиль->Sort  снять флажок.

  1.  Для выбора из списка необходимо реализовать функцию обработчик двойного щелчка на элементе. Заготовку этой функции реализуем через ClassWizard

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 -вид готового объекта. Это может быть одно из следующих значений:

  •  BLACK_BRUSH  - Черная кисть.
  •  DKGRAY_BRUSH  - Темно-серая кисть.
  •  GRAY_BRUSH  - Серая кисть.
  •  HOLLOW_BRUSH  - Полая кисть.
  •  LTGRAY_BRUSH  - Светло-серая кисть.
  •  NULL_BRUSH  - Нулевая (пустая) кисть.
  •  WHITE_BRUSH  - Белая кисть.
  •  BLACK_PEN  - Черное перо.
  •  NULL_PEN  - Нулевое (пустое) перо.
  •  WHITE_PEN  - Белое перо.
  •  DEVICE_DEFAULT_FONT  - Аппаратно-зависимый шрифт.
  •  SYSTEM_FONT  - системный шрифт.

Возвращаемое значение - указатель на объект 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  - новый режим рисунка. Это может быть любое из следующих значений:

  •   R2_BLACK - Пиксел всегда черный.
  •   R2_WHITE  - Пиксел всегда белый.
  •   R2_NOP  - Пиксел остается неизменным.
  •   R2_NOT  - Пиксел - инверсия экранного цвета.
  •   R2_COPYPEN  - Пиксел - перьевой цвет.
  •   R2_NOTCOPYPEN  - Пиксел - инверсия перьевого цвета.
  •   R2_MERGEPENNOT  - Пиксел - комбинация перьевого цвета и инверсии экранного цвета (конечный пиксел = (НЕ экранный пиксел) ИЛИ перо).
  •   R2_MASKPENNOT  - Пиксел - комбинация обычных цветов  пера и  инверсии экрана (конечный пиксел = (НЕ экранный пиксел) И перо).
  •   R2_MERGENOTPEN  - Пиксел - комбинация экранного цвета и инверсии перьевого цвета (конечный пиксел = (НЕ перо) ИЛИ экранный пиксел).
  •   R2_MASKNOTPEN  - Пиксел - комбинация обычных цветов экрана и  инверсии пера (конечный пиксел = (НЕ перо) И экранный пиксел).
  •   R2_MERGEPEN Пиксел - комбинация перьевого цвета и экранного цвета (конечный пиксел = перьевой ИЛИ экранный пиксел).
  •   R2_NOTMERGEPEN  - Пиксел - инверсия цвета R2_MERGEPEN (конечный пиксел = НЕ (перьевой ИЛИ экранный пиксел)).
  •   R2_MASKPEN  - Пиксел - комбинация цветов пера и экрана (конечный пиксел = перьевой И экранный пиксел).
  •   R2_NOTMASKPE - Пиксел - инверсия цвета R2_MASKPEN (конечный пиксел = = НЕ (перьевой И экранный пиксел)).
  •   R2_XORPEN  - Пиксел - комбинация цветов, которые находятся в пере или в экране, но не в обоих (конечный пиксел = перьевой пиксел экрана неэквивалентности).
  •   R2_NOTXORPEN  - Пиксел - инверсия цвета R2_XORPEN (конечный пиксел = НЕ (перьевой пиксел экрана неэквивалентности)).

Возвращаемое значение - предыдущий режим рисунка.

Замечание

Режим рисунка устанавливается только для растровых устройств,  это не применяется к векторным устройствам. Рисующие режимы - двойные коды растровой операции, представляющие все возможные Булевские комбинации двух переменных, используя двойные операторы И, ИЛИ, неэквивалентность (исключительные ИЛИ), и операцию 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.

Возвращаемое значение - тип новой области отсечения. Это может быть любое из следующих значений:

  •  COMPLEXREGION  - область имеет накладывающиеся границы.
  •  ОШИБКА  - никакая область не была создана.
  •  NULLREGION  - область пуста.
  •  SIMPLEREGION  - область не имеет никаких границ перекрывания.

CDC:: ExcludeUpdateRgn

Этот метод запрещает рисование в пределах недопустимых областей окна исключением модифицированной области из области отсечения, связанной с объектом CDC.

int ExcludeUpdateRgn (

CWnd* pWnd );

Параметры

pWnd  - указатель на окно объекта, которое будет модифицироваться.

Возвращаемое значение - тип исключенной области. Это может быть любое из следующих значений:

  •  COMPLEXREGION  - Область имеет накладывающиеся границы.
  •  ОШИБКА  - Никакая область не была создана.
  •  NULLREGION  - Область пуста.
  •  SIMPLEREGION  - Область не имеет никаких границ перекрывания.

CDC:: GetClipBox

Этот метод возвращает измерения самого плотно ограниченного прямоугольника вокруг границы отсечения. Измерения скопированы в буфер, на который указывает lpRect.

virtual int GetClipBox (

LPRECT lpRect ) 

const;

Параметры

lpRect  - указатель на структуру RECT или объект CRect, который должен получить измерения прямоугольника.

Возвращаемое значение - Тип области отсечения. Это может быть любое из следующих значений:

  •  COMPLEXREGION  - Область имеет накладывающиеся границы.
  •  ОШИБКА  - Никакая область не была создана.
  •  NULLREGION  - Область пуста.
  •  SIMPLEREGION  - Область не имеет никаких границ перекрывания.

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.

Возвращаемое значение - тип новой области отсечения. Это может быть любое из следующих значений:

  •  COMPLEXREGION  - область имеет накладывающиеся границы.
  •  ОШИБКА  - никакая область не была создана.
  •  NULLREGION  - область пуста.
  •  SIMPLEREGION  - область не имеет никаких границ перекрывания.

CDC:: OffsetClipRgn

Этот метод перемещает область отсечения контекста устройства c указанными смещениями. Метод перемещает область на x единиц по оси X и y единиц по оси Y.

int OffsetClipRgn (

int x,

int y);

int OffsetClipRgn (

SIZE size);

Параметры

x – количество логических единиц для сдвига влево и вправо;

y  - количество логических единиц для сдвига вверх и вниз.

Size - величина смещения.

Возвращаемое значение - тип новой области отсечения. Это может быть любое из следующих значений:

  •  COMPLEXREGION  - область имеет накладывающиеся границы.
  •  ОШИБКА  - никакая область не была создана.
  •  NULLREGION  - область пуста.
  •  SIMPLEREGION  - область не имеет никаких границ перекрывания.

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);

}

CDC:: PolyPolygon

Этот метод создает два или больше многоугольника. Многоугольники могут быть бессвязными или перекрывать друг друга.

BOOL PolyPolygon (

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  не использует и  не модифицирует текущую позицию.

CDC:: Rectangle

Этот метод рисует прямоугольник, используя текущее перо. Внутренняя область прямоугольника заполнена, используя текущую кисть.

BOOL Rectangle(

int x1 ,

int y1 ,

int x2 ,

int y2 <>);

BOOL Rectangle(

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  - Тип прямоугольника. Этот параметр может быть один, два, или ни одно из следующих значений:

  •  ETO_CLIPPED  - Определяет, что текст отсечен к прямоугольнику.
  •  ETO_OPAQUE  - Определяет, что цвет фона заполняет прямоугольник.

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




1. . 2014 10
2. Реферат- Принципы организации многостаночного обслуживания на промышленном предприятии
3.  Расходы государства на отрасли социальнокультурной сферы 1991 100
4. К~ркем аударма ~ ~деби шы~арманы~ бір тілден екінші тілге аударыл~ан н~с~асы к~ркем ~деби шы~армашылы~ты
5. ЗНАКОМСТВО С ЭЛЕКТРОННЫМИ ТАБЛИЦАМИ MS EXCEL Назначение и функционал
6. тема не освещалась Воспользоваться электронной библиотекой мэси
7. ПрофиАРТ Доброго времени суток Господа участники школы
8. Реферат Інформатика і сучасна школа
9. Проектування триланкової розподіленої інформаційної системи для роботи з БД із використанням технології DataSnap (MIDAS
10. дворянская культура гордость мировой культуры XIX и начала XX вв
11. Тема- Характеристика арго и жаргонов Выполнила студентка 1 к
12. Управление образования города Кировска Муниципальное бюджетное дошкольное образовательное учреждение
13. Плоская задача теории упругости
14. Солнечные пятна и психозы (гелиопсихология)
15. Изучение регистро
16. Муха Афганистан
17. Контрольная работа- Недостатки планирования современных аптечных учреждений
18. Я В Индии людям стремящимся к посвящению в науку называемую Раджайога когда они обращаются к учителя.html
19. варианты Г В Б А Нецивилизованные страны Цивилизованные страны Цивилизации
20. на тему- Основи технології гірничого виробництва Виконав- Ст