С++ Радужная мишень

Всем привет,сегодня мы будем программировать.И наша программа будет высвечивать нам квадратную мишень радужной раскраски.
Приступим ...

Для начала заходим в MicrosoftVisualStudio.Выбираем MFC Application,называем проект как хотим.Далее открываем обозреватель решений.Для программы потребуется 2 файла :
ProgramDlg.h i ProgramDlg.cpp

Открываем ProgramDlg.h и опускаемся вниз программного кода. Отодвигаем вниз };  а вверху пишем :


private:

HPEN hPenOxy, hOldPen;
HBRUSH m, oldm, brush;
HPEN pen;

COLORREF cf, c[25];

CPen d, oldd;
CBitmap pic;
CRect rc, w, kw[12];

CString ms, t, z;

int Matrix[50][50];
int RH, RW, k, i, j, cx, cy, dx, dy;
bool fg;



Этим кодом мы ввели переменные,разные кисточки и способы рисования.

Теперь перейдём к ProgramDlg.cpp

Доходим до середины кода или до строчки

void CProgramDlg::DoDataExchange(CDataExchange* pDX)

и под ней пишем :

{
CDialog::DoDataExchange(pDX);

fg = true;

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



SetWindowTextW(L"Program");
}



Мы добавили 7 цветов радуги. (P.S.  Коды всех цветов можно найти в программе ColorMania)
чтобы скачать ColorMania нажмите на эту кнопку

Теперь доходим до конца кода ,

Находим строку

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);

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.Ellipse(rc.left+k*dx, rc.top, rc.left + (k+1)*dx, rc.bottom);
dc.Rectangle(rc.left+k*dx/3+100, rc.top + k*dy/3+35, rc.right-k*dx/3-100, rc.bottom - k*dy/3-35);
}

hPenOxy = CreatePen(PS_SOLID, 6, RGB(255,255,255));
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
/*
for (k = 0; k < 6; k++)
{
dc.MoveTo(rc.left + (k + 1)*dx, rc.top);
dc.LineTo(rc.left + (k + 1)*dx, rc.bottom);
dc.MoveTo(rc.left, rc.top + (k + 1)*dy);
dc.LineTo(rc.right, rc.top + (k + 1)*dy);
}
*/

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


CDialog::OnPaint();
}
}




Готово!!! 

Если вы все сделали правильно, то при нажатии  на  Локальный отладчик Windows , у вас получиться:



Спасибо что уделили мне внимание,для меня это очень важно.
Пока ;)


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

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