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

Kvadrat.Ellipse


Начало создания программы с окном в котором есть цветной квадрат и эллипс с ободом. 


Листинг .СРР





// 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, RGB(255, 255, 255));

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

             hPenOxy = CreatePen(PS_SOLID, 8, 0x00FF2D49);
             hOldPen = (HPEN)SelectObject(dc, hPenOxy);
        m = CreateSolidBrush(0x0000DDFF);
             oldm = (HBRUSH)dc.SelectObject(m);

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


             SelectObject(dc, hOldPen);
             DeleteObject(hPenOxy);
             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, RGB(255, 255, 255));

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

             hPenOxy = CreatePen(PS_SOLID, 8, 0x00FF2D49);
             hOldPen = (HPEN)SelectObject(dc, hPenOxy);
        m = CreateSolidBrush(0x0000DDFF);
             oldm = (HBRUSH)dc.SelectObject(m);

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


             SelectObject(dc, hOldPen);
             DeleteObject(hPenOxy);
             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, RGB(255, 255, 255));

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

       hPenOxy = CreatePen(PS_SOLID, 8, 0x00FF2D49);
       hOldPen = (HPEN)SelectObject(dc, hPenOxy);
       m = CreateSolidBrush(0x0000DDFF);
       oldm = (HBRUSH)dc.SelectObject(m);


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


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




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

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