Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.DOC
Скачиваний:
7
Добавлен:
16.05.2015
Размер:
662.02 Кб
Скачать

4.5.4 Рисування стандартних геометричних фігур

Для побудови прямокутника використовується метод Rectangle:

BOOL Rectangle(int x1, int y1, int x2, int y2): ,

а для побудови еліпса – метод Ellipse:

BOOL Ellipse(HDC hdc, int x1, int y1, int x2, int y2); .

Тут параметри x1і y1 визначають координати лівого верхнього кута прямокутника, а параметри x2і y2координати нижнього правого кута прямокутника (рис.2.2, рис. 2.3).

Для рисування різноманітних багатокутників можна використати метод Polygon:

BOOL Polygon(CONST POINT *lpPoints, int nCount); .

Параметр lpPointsпредставляє собою масив структурPOINT, які містять координати вершин, аnCountє числом точок в масиві (їх повинно бути не менше двох).

В MFC-програмах можна також нарисувати сегмент за допомогою методуСhord:

BOOL Сhord(HDC hdc, int x1, int y1, int x2, int y2, int x3, int y3,

int x4, int y4); .

а також сектор за допомогою методу Pie:

BOOL Pie(HDC hdc, int x1, int y1, int x2, int y2, int x3, int y3,

int x4, int y4); .

Призначення аргументів в останніх двох методах такі ж, як і в однойменних функціях API(рис.2.4, рис. 2.5).

4.5.5 Приклад програми з векторною графікою

Як приклад розглянемо програму, що формує зображення трьох геометричних фігур: прямокутника, еліпса, трикутника та текстові підказки. Зображення кожної фігури виводиться в робочу область вікна програми при виборі відповідного пункту меню. При заданні розмірів прямокутника і еліпса використовується класCRect.

#include <afxwin.h>

#include "Resource.h"

class CMyFrameWnd:public CFrameWnd

{

public:

CMyFrameWnd();

protected:

afx_msg void OnRectangle();

afx_msg void OnEllipse();

afx_msg void OnPoligon();

afx_msg void OnExit();

afx_msg void OnAbout();

DECLARE_MESSAGE_MAP();

};

BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)

ON_COMMAND(IDM_RECTANGLE,OnRectangle)

ON_COMMAND(IDM_ELLIPSE,OnEllipse)

ON_COMMAND(IDM_POLIGON,OnPoligon)

ON_COMMAND(IDM_EXIT,OnExit)

ON_COMMAND(IDM_ABOUT,OnAbout)

END_MESSAGE_MAP();

CMyFrameWnd::CMyFrameWnd()

{

Create(NULL,"My 4th program",

WS_OVERLAPPEDWINDOW,rectDefault,NULL,

MAKEINTRESOURCE(IDR_MAINFRAME));

};

void CMyFrameWnd::OnRectangle()

{

CClientDC dc(this);

CPen pen;

CBrush brush;

CRect rect(30,50,250,200);

pen.CreatePen(PS_SOLID, 3, RGB(0,0,255));

brush.CreateSolidBrush(RGB(0,255,0));

dc.SelectObject(&pen);

dc.SelectObject(&brush);

dc.FillRect(&rect,&brush);

dc.Rectangle(&rect);

dc.DrawText("It is Rectangle",rect,3);

pen.DeleteObject();

brush.DeleteObject();

}

void CMyFrameWnd::OnEllipse()

{

CClientDC dc(this);

CPen pen;

CBrush brush;

CRect rect;

GetClientRect(&rect);

pen.CreatePen( PS_SOLID, 5, RGB( 0, 127, 127));

dc.SelectObject(&pen);

brush.CreateHatchBrush(HS_CROSS, RGB( 255, 0, 0));

dc.SelectObject(&brush);

dc.Ellipse(rect.left+300, rect.top+50,

rect.right-120,rect.bottom-200);

dc.SetTextColor( RGB( 100, 0, 255));

dc.TextOut(350,110,"It is Ellipse");

pen.DeleteObject();

brush.DeleteObject();

}

void CMyFrameWnd::OnPoligon()

{

CClientDC dc(this);

CPen pen;

CBrush brush;

CPoint mas[3];

mas[0].x=175;

mas[0].y=350;

mas[1].x=350;

mas[1].y=175;

mas[2].x=275;

mas[2].y=350;

pen.CreatePen( PS_SOLID, 3, RGB( 0, 255 , 0));

dc.SelectObject( &pen );

brush.CreateSolidBrush( RGB( 220, 0, 200));

dc.SelectObject( &brush );

dc.Polygon(mas,3);

dc.SetTextColor( RGB( 200, 200, 100));

dc.TextOut( 200 , 340, "It is Triangle");

pen.DeleteObject();

brush.DeleteObject();

}

void CMyFrameWnd::OnAbout()

{

::MessageBox(NULL,"Copyright by Semerenko","About",MB_OK|

MB_ICONEXCLAMATION);

}

void CMyFrameWnd::OnExit()

{

SendMessage(WM_CLOSE);

}

class CMyApp:public CWinApp

{

public:

virtual BOOL InitInstance();

};

BOOL CMyApp::InitInstance()

{

CMyFrameWnd *pMainWnd=new CMyFrameWnd;

m_pMainWnd=pMainWnd;

m_pMainWnd->ShowWindow(m_nCmdShow);

m_pMainWnd->UpdateWindow();

return TRUE;

};

CMyApp app; .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]