воскресенье, 9 апреля 2017 г.

Три спектри

Три спектри







 1) Запускаємо"Visual Studio"
 
1)Відкриваємо файл ProgramDlg.cpp



2) Під строкою"CDialog::DoDataExchange(pDX);" пишемо:

// Цвета радуги:



c[0] = 0x000000FF;
c[1] = 0x00008CFF;
c[2] = 0x0000FFD0;
c[3] = 0x00008000;
c[4] = 0x00CEE23A;
c[5] = 0x00FF0000;
c[6] = 0x008B0B8B;


fg = true;





 3) В ProgramDlg.h пишемо void Risovanie(int p), а в
ProgramDlg.срр знизу встановлюємо процес
Risovanie:


void CProgramDlg::Risovanie(int p)
{
CClientDC dc(this);
GetClientRect(&rc);

w.left = rc.left + 200;
w.right = rc.right - 150;
w.top = rc.top + 110;
w.bottom = rc.bottom - 50;
dc.FillSolidRect(&rc, RGB(255, 255, 255));

x1 = w.left + 70;
y1 = w.top + 20;
x2 = w.right - 70;
y2 = w.bottom - 10;

cf = 0x0000DDFF;
ck = 0x00800000;

hPenOxy = CreatePen(PS_SOLID, 6, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(cf);
oldm = (HBRUSH)dc.SelectObject(m);

if (p == 0) dc.Rectangle(x1, y1, x2, y2);
else dc.Ellipse(x1, y1, x2, y2);

if ((p == 2) || (p == 3))
{
rc.left += 180;
rc.right -= 180;
rc.top += 20;
rc.bottom -= 20;

dx = abs(rc.right - rc.left) / 7;
dy = abs(rc.bottom - rc.top) / 7;

for (k = 0; k < 7; k++)
{
hPenOxy = CreatePen(PS_SOLID, 2, c[k]);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(c[k]);
oldm = (HBRUSH)dc.SelectObject(m);
//dc.Rectangle(rc.left+k*dx, rc.top, rc.left + (k+1)*dx, rc.bottom);
//dc.Rectangle(rc.left, rc.top + k*dy, rc.right, rc.top + (k+1)*dy);

if(p==2) dc.Rectangle(rc.left+k*dx/2, rc.top + k*dy/2, rc.right-k*dx/2, rc.bottom-k*dy/2);
else dc.Ellipse(rc.left + k*dx / 2, rc.top + k*dy / 2, rc.right - k*dx / 2, rc.bottom - k*dy / 2);
}
}

if (p == 4)
{
dx = abs(rc.right - rc.left) / 7;
dy = abs(rc.bottom - rc.top) / 7;

for (k = 0; k < 7; k++)
{
//w.left = rc.left+k*dx;
//w.right = rc.left+(k+1)*dx;
w.top = rc.top + k*dy;
w.bottom = rc.top + (k + 1)*dy;
w.left = rc.left;
w.right = rc.right;
//w.top = rc.top;
//w.bottom = rc.bottom;
dc.FillSolidRect(&w, c[k]);
}

hPenOxy = CreatePen(PS_SOLID, 7, RGB(255, 255, 255));
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

for (k = 0; k < 7; k++)
{
dc.MoveTo(rc.left + k*dx, rc.top);
dc.LineTo(rc.left + k*dx, rc.bottom);

dc.MoveTo(rc.left, rc.top + k*dy);
dc.LineTo(rc.right, rc.top + k*dy);
}

}

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

4) Після того як ми додали Risovanie();





5) В Resourse Solution копіюємо планшет та створюємо інший Dialog1

6) Допишемо код в Dialog1.cpp

//Ves' cpp fail
void CDialog1::Risovanie(int p)
{
CClientDC dc(this);
GetClientRect(&rc);

w.left = rc.left + 200;
w.right = rc.right - 150;
w.top = rc.top + 110;
w.bottom = rc.bottom - 50;
dc.FillSolidRect(&rc, RGB(255, 255, 255));

x1 = w.left + 70;
y1 = w.top + 20;
x2 = w.right - 70;
y2 = w.bottom - 10;

cf = 0x0000DDFF;
ck = 0x00800000;

hPenOxy = CreatePen(PS_SOLID, 6, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(cf);
oldm = (HBRUSH)dc.SelectObject(m);

if (p == 0) dc.Rectangle(x1, y1, x2, y2);
else dc.Ellipse(x1, y1, x2, y2);

if ((p == 2) || (p == 3))
{
rc.left += 180;
rc.right -= 180;
rc.top += 20;
rc.bottom -= 20;

dx = abs(rc.right - rc.left) / 7;
dy = abs(rc.bottom - rc.top) / 7;

for (k = 0; k < 7; k++)
{
hPenOxy = CreatePen(PS_SOLID, 2, c[k]);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(c[k]);
oldm = (HBRUSH)dc.SelectObject(m);
//dc.Rectangle(rc.left+k*dx, rc.top, rc.left + (k+1)*dx, rc.bottom);
//dc.Rectangle(rc.left, rc.top + k*dy, rc.right, rc.top + (k+1)*dy);

if (p == 2) dc.Rectangle(rc.left + k*dx / 2, rc.top + k*dy / 2, rc.right - k*dx / 2, rc.bottom - k*dy / 2);
else dc.Ellipse(rc.left + k*dx / 2, rc.top + k*dy / 2, rc.right - k*dx / 2, rc.bottom - k*dy / 2);
}
}

if (p == 4)
{
dx = abs(rc.right - rc.left) / 7;
dy = abs(rc.bottom - rc.top) / 7;

for (k = 0; k < 7; k++)
{
//w.left = rc.left+k*dx;
//w.right = rc.left+(k+1)*dx;
w.top = rc.top + k*dy;
w.bottom = rc.top + (k + 1)*dy;
w.left = rc.left;
w.right = rc.right;
//w.top = rc.top;
//w.bottom = rc.bottom;
dc.FillSolidRect(&w, c[k]);
}

hPenOxy = CreatePen(PS_SOLID, 7, RGB(255, 255, 255));
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

for (k = 0; k < 7; k++)
{
dc.MoveTo(rc.left + k*dx, rc.top);
dc.LineTo(rc.left + k*dx, rc.bottom);

dc.MoveTo(rc.left, rc.top + k*dy);
dc.LineTo(rc.right, rc.top + k*dy);
}

}

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

void CDialog1::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CProgramDlg dlg;
EndDialog(0);
dlg.DoModal();
CDialog::OnRButtonDown(nFlags, point);
}

void CDialog1::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
{

Risovanie(4);

CDialog::OnPaint();
}


7) в Class Wizard додаємо подію WM_RBUTTONDOWN та пишемо:

CProgramDlg dlg;
     EndDialog(0);

     dlg.DoModal();

     CDialog::OnRButtonDown(nFlagspoint);

Информация отсюда

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

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