Звіт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);
    DDX_Control(pDX, IDC_RADIO3, RD3);
    DDX_Control(pDX, IDC_RADIO4, RD4);
}

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)
    ON_BN_CLICKED(IDC_RADIO3, &CProgramDlg::OnBnClickedRadio3)
    ON_BN_CLICKED(IDC_RADIO4, &CProgramDlg::OnBnClickedRadio4)
END_MESSAGE_MAP()


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

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

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

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

    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, 0x008B0000);
       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, 0x008B0000);
    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, 0x008B0000);
    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::OnBnClickedRadio3()
{
    // TODO: Add your control notification handler code here
    RD3.SetCheck(1);
    RD4.SetCheck(0);
    if (RD3.GetCheck() == 1)
    {
       cf = 0x0000DDFF;
       ck = 0x008B0000;
    }

    if (RD2.GetCheck() == 1)
    {
       //Kvadrat

       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, ck);
       hOldPen = (HPEN)SelectObject(dc, hPenOxy);
       m = CreateSolidBrush(cf);
       oldm = (HBRUSH)dc.SelectObject(m);

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

       SelectObject(dc, hOldPen);
       DeleteObject(hPenOxy);
       DeleteObject(m);
       SelectObject(dc, oldm);
    }
    else
    {
       //Ellipse

       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, ck);
       hOldPen = (HPEN)SelectObject(dc, hPenOxy);
       m = CreateSolidBrush(cf);
       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::OnBnClickedRadio4()
{
    // TODO: Add your control notification handler code here
    RD3.SetCheck(0);
    RD4.SetCheck(1);

    if (RD4.GetCheck() == 1)
    {
       ck = 0x0000DDFF;
       cf = 0x008B0000;
    }

    if (RD2.GetCheck() == 1)
    {
       //Kvadrat

       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, ck);
       hOldPen = (HPEN)SelectObject(dc, hPenOxy);
       m = CreateSolidBrush(cf);
       oldm = (HBRUSH)dc.SelectObject(m);

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

       SelectObject(dc, hOldPen);
       DeleteObject(hPenOxy);
       DeleteObject(m);
       SelectObject(dc, oldm);
    }
    else
    {
       //Ellipse

       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, ck);
       hOldPen = (HPEN)SelectObject(dc, hPenOxy);
       m = CreateSolidBrush(cf);
       oldm = (HBRUSH)dc.SelectObject(m);

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

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

    }
}

   Запускаємо Color Maniа і обираємо колір




Запускаємо програму і отримуємо:

1)Квадрат

а) Натискаючи на кнопку Фон, у квадраті фон має стати жовтого кольору.



б) Натискаючи на кнопку Контур, контур фігури має стати синього кольору.




2)Коло

а) Натискаючи на кнопку Контур, у колі фон має стати синього кольору.



б) Натискаючи на кнопку Контур, у колі фон може також стати жовтого кольору.







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

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