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

Программа "Геометрические фигуры"

Сегодня мы создадим программу Геометрические фигуры в Visual Studio.
Открываем архив Program2015. Запускаем и компилируем его. Добавляем на планшетку Static tеxt, Radio.

Radio-ПКМ-Add Variable. Variable name- RD1, RD2.

Редактируем наш код. // 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<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
       {
             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<HCURSOR>(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);
}
 /
Так же, чтобы выбрать цвета используем программу ColorMania.


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

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