Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

четвер, 4 травня 2017 р.

Створення програми "PolarPaint"

Всім привіт! Сьогодні я розповім вам, як створити легку програму С++, при запуску якої, у нас з'явиться координатна площина, на якій будуть малюватись різні фігури.



Для початку, беремо основу програми.



Повертаємось до VisualStudio. Відкриваємо Solution Explorer - нам знадобляться 3 файли, це: ProgramDlg.hProgramDlg.cpp та Редактор вікна









Відкриваємо "Редактор вікна" і б'ємо вікно в точку. Далі, клацаємо по файлу вікна і натискаємо "Add Resource". У відкритому вікні обираємо "Menu" та натискаємо "Add".

Після цього, робимо меню такого вигляду:















Зберігаємо, запускаємо локальний відладчик. Має вийти ось так:
































Переходимо назад до меню, по першому пункту клацаємо правою клавішею миши і обираємо "Add Event Handler". У відчиненому вікні змінюємо тільки другий пункт на CProgramDlg. Натискаємо "Add and Edit".
Робимо так з усіма пунктами меню. Можна взяти з текстового файлу PolarPaint код для пунктів меню, або взяти мій код:


Відкриваємо ProgramDlg.h і стираємо весь код; 
І вставляємо цей код:


// ProgramDlg.h : файл заголовка
//

#pragma once

#define mtime 298
#define PI 3.14159265358979323846

// диалоговое окно CProgramDlg
class CProgramDlg : public CDialog
{
// Создание
public:
CProgramDlg(CWnd* pParent = NULL); // стандартный конструктор

// Данные диалогового окна
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_PROGRAM_DIALOG };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV


// Реализация
protected:
HICON m_hIcon;

// Созданные функции схемы сообщений
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()

private:

COLORREF cf,ck, c[25];
HFONT hold, hNew, hbk;
HPEN hPenOxy, hOldPen, pen;
HBRUSH m, oldm, brush;
CPen d, oldd;
CBitmap pic;
CRect rc, w, kw[30];

CString msg, t, z;

int Matrix[50][50];
int x1, y1, x2, y2, x3, y3, x4, y4;
int RH, RW, k, i, j, p, x, y, cx, cy, dx, dy;

bool fg;

public:
afx_msg void OnJPolar01();
afx_msg void OnJPolar02();
afx_msg void OnJPolar03();
afx_msg void OnFilePolar04();
afx_msg void OnFilePolar05();
afx_msg void OnFile6();
afx_msg void OnFilePolar07();
};

Потім, відкриваємо ProgramDlg.cpp і стираємо весь код;
Замість старого коду вставляємо ось цей код
:

// ProgramDlg.cpp : файл реализации
//

#include "stdafx.h"
#include "Program.h"
#include "ProgramDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// диалоговое окно CProgramDlg



CProgramDlg::CProgramDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_PROGRAM_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CProgramDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);

c[0] = 0xFF00FF;
c[1] = 0xFFA500;
c[2] = 0xFFFF;
c[3] = 0x0C7800;
c[4] = 0x005690;
c[5] = 0xFFFF0000;
c[6] = 0xCC00AA;
c[7] = 0xAA5600;
c[8] = 0xAAAA;
c[9] = 0x00CC00;
c[10] = 0x090056;
c[11] = 0xF0F0F0;

fg = true;

SetWindowTextW(L"Program");
}

BEGIN_MESSAGE_MAP(CProgramDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_J_POLAR01, &CProgramDlg::OnJPolar01)
ON_COMMAND(ID_J_POLAR02, &CProgramDlg::OnJPolar02)
ON_COMMAND(ID_J_POLAR03, &CProgramDlg::OnJPolar03)
ON_COMMAND(ID_FILE_POLAR04, &CProgramDlg::OnFilePolar04)
ON_COMMAND(ID_FILE_POLAR05, &CProgramDlg::OnFilePolar05)
ON_COMMAND(ID_FILE_6, &CProgramDlg::OnFile6)
ON_COMMAND(ID_FILE_POLAR07, &CProgramDlg::OnFilePolar07)
END_MESSAGE_MAP()


// обработчики сообщений CProgramDlg

BOOL CProgramDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Задает значок для этого диалогового окна.  Среда делает это автоматически,
//  если главное окно приложения не является диалоговым
SetIcon(m_hIcon, TRUE); // Крупный значок
SetIcon(m_hIcon, FALSE); // Мелкий значок

// TODO: добавьте дополнительную инициализацию

return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления
}

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
//  чтобы нарисовать значок.  Для приложений MFC, использующих модель документов или представлений,
//  это автоматически выполняется рабочей областью.

void CProgramDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // контекст устройства для рисования

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Выравнивание значка по центру клиентского прямоугольника
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Нарисуйте значок
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// Система вызывает эту функцию для получения отображения курсора при перемещении
//  свернутого окна.
HCURSOR CProgramDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}



void CProgramDlg::OnJPolar01()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(0, 190, 0);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"R=200", 5);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
r = 200;
f = 0;
do
{
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);
}


void CProgramDlg::OnJPolar02()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(230, 0, 0);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 180, cyClient / 200 + 110, L"спираль", 7);
TextOut(dc, cxClient - cxClient / 100 * 2 - 180, cyClient / 200 + 140, L"\"АРХИМЕДА\"", 10);

// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
r = 0;
f = 0.1;
do
{
r += 0.05;
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);

SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnJPolar03()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"k=7", 3);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
int a, k;
a = 200;
k = 7;
r = 200;
f = 0.1;
do
{
r = a*sin(k*f);
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFilePolar04()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"k=3", 3);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
int a, k;
a = 200;
k = 3;
r = 200;
f = 0.1;
do
{
r = a*sin(k*f);
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFilePolar05()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"k=5", 3);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
int a, k;
a = 200;
k = 5;
r = 200;
f = 0.1;
do
{
r = a*sin(k*f);
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFile6()
{
// TODO: Add your command handler code here

CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"k=129", 5);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
int a, k;
a = 200;
k = 128;
r = 200;
f = 0.1;
do
{
r = a*sin(k*f);
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);
}


void CProgramDlg::OnFilePolar07()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 150, cyClient / 200 + 140, L"КАРДИОИДА", 9);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double e, r, f;
int a, b, k;
a = 90;
b = 70;
k = 82;
e = a / b;
r = 200;
f = 0;
do
{
x = (b + e*b)*cos(e*f) - k*cos(f + e*f);
y = (b + e*b)*sin(e*f) - k*sin(f + e*f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);
}

Зберігаємо програму і запускаємо локальний відладчик








В результаті, у нас виходить ось така програма:





















Дякую за увагу!

Немає коментарів:

Дописати коментар