|
Программирование >> Процедурные приложения
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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |