Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Что такое контекст устройства?




Вы должны хорошо понимать, что такое "контекст устройства". Вообще говоря, так называется область памяти, используемая в системе Windows для выполнения графических операций. Графический вывод может выполняться как на экран, так и на принтер. Объекты класса СDС содержат множество встроенных методов, используемых в процессе рисования в контексте устройства. Все рисование в Windows выполняется через контекст устройства.

ПОДСКАЗКА: На первый взгляд может показаться, что контексты устройств усложняют ситуацию, но вообще-то они упрощают ее. Дело в том, что они могут соответствовать самым разным устройствам, например, экрану монитора или принтеру. Если вы рисуете через контекст устройства, то изображение будет правильно отображаться на разных устройствах, в том числе на экране и на принтере.

Чтобы рисовать в нашем объекте вида, мы получаем контекст устройства, относящийся к нему. Кроме того, можно получить контекст устройства для всего окна, всего экрана или принтера. Для рисования в контексте устройства используются перечисленные ниже методы класса CDC; обратите внимание на их количество.

FrameRect GetArcDirection  GetBkMode  GetCharABCWidths GetColorAdjustnient GetCurrentFont GetCurrentPosition GetGlyphOutline GetMapMode GetOutlineTextMetriс  GetOutputTextExtent GetPixel GetSafeHdc  GetTextAlign GetTextExtent  GetViewportExt GetWindowExt HIMETRICtoDP  InvertRect LPtoDP MoveTo OffsetWindowOrg  Pie  PolyBezier  Polygon  PolyPolygon QueryAbort RectVisible  ResetDC  SaveDC  ScrollDC SelectObject SetAbortProc SetBkColor SetBrushOrg SetKapperFlags JsetPixel  SetPlxelV SetROP2  SetStretchBltMode SetTextCharacterExtra  SetTextColoг SetVlewportExt  SetViewportOrg SetWindowOrg StartDoc SretchBIt  StrokeAndFillPath TabbedTextOut  TextOut WidenPath AbortPath Arc BeginPath  Chord  CreateDC  DeleteTempMap  DPtoLP DrawEdge  DrawFrameControl  DrawText EndPage Escape  ExtFloodFill FillRect  FlattenPath FrameRgn GetAspectRatioFilter GetBoundsRect  GetCharWidth GetCurrentBitmap GetCurrentPalette  GetDeviceCaps GetHalftoneBrush  GetMiterLimt GetOutputCharWidth GetOutputTextMetrics GetPolyFillMode GetStretchBltMode GetTextCharacterExtra GetTextFace GetViewportOrg GetWindowOrg HIMETRICtoLP InvertRgn LPtoHIMETRIC OffsetClipRgn PaintRgn PlayMetafile PolyBezierTo Polyline PolyPolyllne RealizePalette ReleaseAttrlbDC RestoreDC ScaleViewportExt SelectClipPath SelectPalette SetArcOirection SetBkMode SetColorAdjustment SetMiterlimit FromHandle  GetBkColor  GetBrushOrg GetClipBox GetCurrentBrush GetCurrentPen GetFontData GetKerningPairs GetNearestColor GetOutputTabbedTextExtent  GetPath  GetROP2 GetTabbedTextExtent GetTextColor GetTextMetrics  GetWindow GrayString  IntersectClipRect  LineTo MaskBIt OffsetViewpotOrg PatBIt PIgBIt PolyOraw  PolylineTo PtVisible Rectangle ReleaseOutputDC RoundRect ScaleWindowExt SelectClipRgn SelectStockObject SetAttribDC SetBoundsRect SetMapMode SetOutputDC SetPolyFillMode SetTextAlign SetTextJustification SetWindowExt StartPage StrokePath UpdateColors

В нашем случае для вывода в объекте вида (соответствующего клиентской области окна) был использован метод TextOutкласса CDC. Методу OnDraw() передается Указатель pDC, ссылающийся на контекст устройства для нашего вида. Чтобы вывести текст welcome_stringв клиентской области, достаточно выполнить следующую строку:

pDC->TextOut(0, 0, welcome_string);

Методу TextOut() передаются координаты левого верхнего угла той области окна, где должна располагаться наша строка. В нашем случае текст выводится с точки (0,0)— левого верхнего угла клиентской области. Затем метод получает саму строку, welcome_string.

ПОДСКАЗКА: В нашей клиентской области точка (0, 0) расположена в левом верхнем углу. Значение координаты х возрастает слева направо, а координаты у — сверху вниз. Такую координатную систему можно сравнить с чтением текста на странице: во время чтения вы перемещаетесь взглядом сверху вниз и слева направо.

Итак, выполнение этой строки программы приводит к тому, что наша строка выводится на экран. Так данные программы отображаются в объекте вида.

Исходный текст объекта вида находится в файлах welcomeView.h/welcomeView.cpp.

ПОДСКАЗКА: В различные моменты работы программа может передавать методу OnDraw() разные контексты устройств. Например, когда мы добавили код в метод OnDraw(), в нашей программе появилась возможность вывода на печать. Если пользователь выполнит команду File> Print или нажмет кнопку с принтером на панели инструментов, программа передаст методу OnDraw() контекст устройства для принтера и наш текст будет напечатан. Если вы захотите предпринять какие-то специальные действия для подготовки печати, например, особым образом отформатировать свой документ), можете внести соответствующий код в метод OnPreparePrinting().

Объект вида отображает данные программы, которые обычно хранятся в объекте документа. Сейчас мы рассмотрим последний из четырех основных объектов нашей программы.

Исследуем объект документа

В объекте документа хранятся данные программы. В примере welcome нам потребовался только объект welcome_string. Для простоты мы разместили его в объекте вида, но на самом деле ему следовало бы находиться в объекте документа.

Как разместить welcome_string в объекте документа? Прежде всего, нам следовало бы объявить welcome_string в заголовочном файле документа welcomeDoc.h:

// welcomeDoc.h: интерфейс класса CWelcomeDoc

//

#if!defined(AFXJJELCOMEDOC_hL_AF072C89_900AJ1DO_8860_444553540000_INCLUDED_)

#define AFX_WELCOMEDOC_H,_AF072C89_900A_11DO_8860_444553540000_INCLUDED_

#if _MSC_VER >= 1000

#pragma once

#endif // _MSC_VER >= 1000

class CWelcomeDoc: public CDocument

{

protected: // создание только при сериализации

CWelcomeDoc();

DECLARE_DYNCREATE(CWelcomeDoc)

CString welcome_Strlng;

}

Затем мы инициализируем объект welcome_string в конструкторе класса документа, расположенном в файле welcomeDoc.cpp:

CWelcomeDoc::CWelcomeDoc()

{

welcome_string ="Добро пожаловать в Visual C++!";

}

Данные хранятся в объекте документа и готовы к работе—но как обратиться к ним из объекта вида?










Последнее изменение этой страницы: 2018-04-12; просмотров: 538.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...