Всем привет,сегодня мы будем программировать.И наша программа будет высвечивать нам квадратную мишень радужной раскраски.
Приступим ...
Для начала заходим в 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();
}
}
Приступим ...
Для начала заходим в 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 , у вас получиться:
Спасибо что уделили мне внимание,для меня это очень важно.
Пока ;)
Комментариев нет:
Отправить комментарий