Программирование >>  Процедурные приложения 

1 ... 108 109 110 [ 111 ] 112 113 114 ... 150


CPen* oldpen;

Поскольку для рисования различных графических примитивов применяются аналогичные алгоритмы, мы рассмотрим лишь два типичных примера. В первом на экран выводится толстая черная диагональная линия:

рисование толстой черной диагональной линии newpen. CreatePen(PS SOLID, 6, dwColor[0]); oldpen = dc.SelectObject (Snewpen) ; dc.MoveTo(0, 0); dc.LineTo(640, 430);

dc.TextOut (70, 20, odiagonal line , 15); удаление пера dc.SelectObject (oldpen) ; newpen. DeleteObject() ;

Объект пера создается функцией CreatePen() которая задает рисование черных сплошных линий толщиною в шесть логических единиц. Сразу после этого функция SelectObject() загружает созданный объект в контекст устройства и возвращает указатель на предыдущий объект пера. Функции Moveто() и LineTo() формируют линию, которая рисуется выбранным пером. Наконец, функция Textout() выводит надпись рядом с нарисованной фигурой. В завершение снова вызывается функция Selectobject(), которая восстанавливает прежнее перо, а функция DeleteObject() удаляет ненужное перо.

Работа с кистями организуется аналогичным образом. В следующем фрагменте кода создается кисть с заливкой горизонтальными и вертикальными штрихами (hs cross) синего цвета.

рисование черного закругленного прямоугольника и заливка его синим цветом

newbrush.CreateHatchBrush(HS CROSS, dwColor[3]);. oldbrush = dc.Selectobject(Snewbrush); dc.RoundRect(60, 310, 110, 350, 20,20);

dc.TextOut(120,310, <-rounded rectangle , 24);

удаление кисти

dc.Selectobject(oldbrush);

newbrush.DeleteObject();

Функция RoundRect() рисует закругленный прямоугольник с черным контуром, который заливается с помощью выбранной кисти.

Запуск программы

Окно аналогичной программы представлено на рис. 19.2.




Рис. 19.2. Построение различных GDI объектов

Возможно, вы заметили, что в программе имеется один недостаток. Заключается он в том, что все координаты графических объектов, выводимых GDI-функциями, задаются в пикселях. А что произойдет, если изменится разрешение экрана, например вместо режима 800x600 будет установлен режим 1024x768? В этом случае выводимое изображение займет только верхнюю левую часть окна.

Во избежание этой проблемы приложение должно уметь определять характеристики экрана и соответствующим образом настраивать вывод изображения. Реализация этой возможности усложняет код программы. Тем не менее в следующих двух примерах будет показано, как можно масштабировать выводимые изображения в соответствии с текущим разрешением экрана.

Построение ряда Фурье

Следующая программа выводит в рабочей области окна графическое представление ряда Фурье. В данном приложении используются ресурсы двух видов: меню и диалоговые окна. По мере возрастания сложности программы увеличивается и число файлов, вовлеченных в проект. Данное приложение включает файл заголовков FOURIER.H, файл ресурсов FOURIERR.H(обратите внимание на дополнительное R в конце имени файла), файл сценариев ресурсов FOURIER. RCи программный файл FOURIER.CPP.

Ниже показан текст файла FOURIER. H:

class CMainWnd : public CFrameWnd

public:

CMainWnd();

afx msg void OnPaintO;

afx msg void OnSize(UINT, int, int);

afx msg int OnCreate(LPCREATESTRUCT cs);

afx msg void OnAboutO;

afx msg void OnFourierData() ;

afx msg void OnExit();

DECLARE MESSAGE MAP()

class CTheApp : public CWinApp

public:

virtual BOOL Initlnstance(); );



class CFourierDataDialog : public CDialog

public:

CFourierDataDialog(CWnd* pParentWnd=NULL) : CDialog( FourierData , pParentWnd)

{ }

virtual void OnOK(); };

Файл FOURIERR.H содержит идентификаторы элементов меню и диалоговых окон.

#define IDM FOUR 100 #define IDM ABOUT 110

#define IDM EXIT 120 #define IDD TERMS 200 #define IDD TITLE 201

Файл FOURIER.RC включает описания меню и двух диалоговых окон. В приложении используются довольно простые диалоговые окна, а именно About и окно ввода данных.

#include fourierr.h

#define APSTUDIO READONLY SYMBOLS

#define APSTUDIO HIDDEN SYMBOLS

#include windows. h

#undef APSTUDIO HIDDEN SYMBOLS #include afxres.h / tundef APSTUDIO READONLY SYMBOLS

Ресурсы для английского (США) языка

#if !defined(AFX RESOURCE DLL) defined (APX TARG ENU) . -tifdef

WIN32 LANGUAGE LANG ENGLISH, SUBLANG ENGLISH US #pragma code page (1252)

#endif WIN32

Меню

FOURIERMENU MENU DISCARDABLE BEGIN POPUP Fourier Data BEGIN

MENUITEM Fourier Data... ,IDM FOUR MENUITEM Fourier

About... ,IDM ABOUT MENUITEM Exit ,IDM EXIT END END

/

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

ABOUTBOX DIALOG DISCARDABLE 14,22,200, 75 STYLE WS POPUP WS CAPTION CAPTION About Box BEGIN

CTEXT A Fourier Series Waveform , -1, 30, 5, 144, 8

CTEXT A MFC Application , -1,30, 17,144,8

CTEXT By William H. Murray and Chris H. Pappas , -1,28,28, 144, 8

CTEXT (c)Copyright1998 ,201, 68,38, 83, 8 DEFPUSHBUTTON 0K ,IDOK, 84,55,32,14,WS GROUP END

FOURIERDATA DIALOG DISCARDABLE 74,21,142, 70 STYLE WS POPUP WS CAPTION CAPTION Fourier Data BEGIN LTEXT Title: , -1,6, 5, 28,8, NOT WS GROUP



1 ... 108 109 110 [ 111 ] 112 113 114 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика