воскресенье, 19 марта 2017 г.

Геометрические формы. Проект. (1 часть)

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

В начале нам нужно четко подобрать размеры круга и квадрата.В разделе OnBnClickedRadio1():
CClientDC dc(this);
GetClientRect(&rc);


w.left = rc.left + 200;
w.right = rc.right - 150;
w.top = rc.top + 100;
w.bottom = rc.bottom - 20;



dc.FillSolidRect(&w, 0x00E94EB3);


kw[0].left = w.left + 50;
kw[0].top = w.top + 25;
kw[0].right = w.right - 100;
kw[0].bottom = w.bottom - 25;


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


m = CreateSolidBrush(0x0050FFF6);
oldm = (HBRUSH)dc.SelectObject(m);

И так же в разделе OnBnClickedRadio2():

CClientDC dc(this);
GetClientRect(&rc);


w.left = rc.left + 200;
w.right = rc.right - 150;
w.top = rc.top + 100;
w.bottom = rc.bottom - 20;



dc.FillSolidRect(&w, 0x00E94EB3);


kw[0].left = w.left + 50;
kw[0].top = w.top + 25;
kw[0].right = w.right - 100;
kw[0].bottom = w.bottom - 25;


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


m = CreateSolidBrush(0x0050FFF6);
oldm = (HBRUSH)dc.SelectObject(m);

Находим строку(в двух разделах) :

m = CreateSolidBrush(0x0050FFF6);- функция CreateSolidBrush создает логическую кисть, которая имеет заданный сплошной тон.То, что находиться в скобках (0x0050FFF6)- это код света. Это вы можете выбрать в интернете:
или же с помощью программы ColorMania:
где:
Также, можно поменять цвета в таких строках как:
hPenOxy = CreatePen(PS_SOLID, 8, 0x00FF141C);(цвет фигуры)
dc.FillSolidRect(&w, 0x00E94EB3); 

Дальше проверяем строки:


// Выравнивание значка по центру клиентского прямоугольника
 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; 

и полностью проект:

// 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");
DDX_Control(pDX, IDC_RADIO1, RD1); 
DDX_Control(pDX, IDC_RADIO2, RD2);
 } 
BEGIN_MESSAGE_MAP(CProgramDlg, CDialog) 
ON_WM_PAINT() 
ON_WM_QUERYDRAGICON() 
ON_BN_CLICKED(IDC_RADIO1, &CProgramDlg::OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO2, &CProgramDlg::OnBnClickedRadio2)
 END_MESSAGE_MAP()

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

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

 // TODO: добавьте дополнительную инициализацию 
RD1.SetCheck(0);
 RD2.SetCheck(1); return TRUE;

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

 void CProgramDlg::OnPaint() 
{
 if (IsIconic()) 
{ CPaintDC dc(this); 

// контекст устройства для рисования 
SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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 { CClientDC dc(this);
 GetClientRect(&rc);

 w.left = rc.left +200; 
w.right = rc.right -150; 
w.top = rc.top + 100; 
w.bottom = rc.bottom -20; 

//dc.FillSolidRect(&w, 0x00E94EB3);

 kw[0].left = w.left + 50; 
kw[0].top = w.top + 25;
 kw[0].right = w.right - 100; 
kw[0].bottom = w.bottom - 25; 
hPenOxy = CreatePen(PS_SOLID, 8, 0x00FF141C);

//создаем кисть цветом
 "crOxy" hOldPen = (HPEN)SelectObject(dc, hPenOxy);
 m = CreateSolidBrush(0x0050FFF6); 
oldm = (HBRUSH)dc.SelectObject(m);
 dc.Rectangle(&kw[0]);

 //dc.Ellipse(&kw[0]); DeleteObject(m); 

SelectObject(dc, oldm); CDialog::OnPaint(); 
}
 }

 // Система вызывает эту функцию для получения отображения курсора при перемещении
 // свернутого окна. 
HCURSOR CProgramDlg::OnQueryDragIcon()
 {
return static_cast(m_hIcon);
 } 
void CProgramDlg::OnBnClickedRadio1() 
// TODO: Add your control notification handler code here RD1.SetCheck(1);
 RD2.SetCheck(0); CClientDC dc(this);
 GetClientRect(&rc);

 w.left = rc.left + 200; 
w.right = rc.right - 150;
 w.top = rc.top + 100; 
w.bottom = rc.bottom - 20;

 dc.FillSolidRect(&w, 0x00E94EB3);

 kw[0].left = w.left + 50;
 kw[0].top = w.top + 25; 
kw[0].right = w.right - 100; 
kw[0].bottom = w.bottom - 25; 
hPenOxy = CreatePen(PS_SOLID, 8, 0x00FF141C);

//создаем кисть цветом "crOxy" 

hOldPen = (HPEN)SelectObject(dc, hPenOxy);
 m = CreateSolidBrush(0x0050FFF6); 
oldm = (HBRUSH)dc.SelectObject(m); 
//dc.Rectangle(&kw[0]);

 dc.Ellipse(&kw[0]); DeleteObject(m);
 SelectObject(dc, oldm); 
}
void CProgramDlg::OnBnClickedRadio2() 
// TODO: Add your control notification handler code here RD1.SetCheck(0); 
RD2.SetCheck(1);
 CClientDC dc(this); 
GetClientRect(&rc); 
w.left = rc.left + 200;
 w.right = rc.right - 150; 
w.top = rc.top + 100; 
w.bottom = rc.bottom - 20;

 dc.FillSolidRect(&w, 0x00E94EB3);

 kw[0].left = w.left + 50; 
kw[0].top = w.top + 25;
 kw[0].right = w.right - 100;
kw[0].bottom = w.bottom - 25; 
hPenOxy = CreatePen(PS_SOLID, 8, 0x00FF141C);

//создаем кисть цветом

 "crOxy" hOldPen = (HPEN)SelectObject(dc, hPenOxy);

 m = CreateSolidBrush(0x0050FFF6); 
oldm = (HBRUSH)dc.SelectObject(m);
 dc.Rectangle(&kw[0]); 

//dc.Ellipse(&kw[0]); 

DeleteObject(m); 
SelectObject(dc, oldm); }




Комментариев нет:

Отправить комментарий