- •4 Створення прикладних mfc-програм в середовищі Windows
- •4.1 Структура мінімальної прикладної mfc-програми
- •4.2 Обробка повідомлень в mfc-програмах
- •4.3 Розробка меню в mfc-програмах
- •4.3.1 Перший спосіб підключення меню в mfc-програмах
- •4.3.2 Другий спосіб підключення меню в mfc-програмах
- •4.3.3 Обробка повідомлень від команд меню
- •4.4 Підключення панелі інструментів і рядка стану
- •4.4.1 Створення панелі інструментів
- •4.4.2 Створення рядка стану
- •4.4.3 Приклад програми
- •4.5.1 Контексти пристроїв в mfc-програмах
- •4.5.2 Використання пера та пензля в mfc-програмах
- •Таблиця 4.3 - Класи графічних об’єктів
- •4.5.4 Рисування стандартних геометричних фігур
- •4.5.5 Приклад програми з векторною графікою
- •4.6 Растрова графіка в mfc-програмах
- •4.7 Програмування діалогу в mfc-програмах
- •4.7.1 Основні етапи створення діалогу в mfc-програмах
- •Таблиця 4.4 - ddx-макроси для найбільш поширених ек
- •4.7.2 Організацію обміну даними з полем введення Edit
- •4.7.3 Організація обміну даними зі списком ListBox
- •4.8 Використання dll-бібліотек в mfc-програмах
- •4.8.1 Призначення бібліотек dll
- •4.8.2 Створення власної бібліотеки dll
- •4.8.3 Підключення функцій бібліотеки dll до виконувального файлу
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; .