Программа "Квадратная мишень"
c[2] = 0x0000FFD0;
c[3] = 0x00008000;
c[4] = 0x00CEE23A;
c[5] = 0x00FF0000;
c[6] = 0x008B0B8B;
fg = true;
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;
float h;
h = 9 / 2;
for (k = 0; k < 7; k++)
{
hPenOxy = CreatePen(PS_SOLID, 2,c[6-k]);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(c[6-k]);
oldm = (HBRUSH)dc.SelectObject(m);
//dc.Rectangle(rc.left+k*dx, rc.top, rc.left + (k+1)*dx, rc.bottom);
dc.Rectangle(150+rc.left+k*dx/h,60+ rc.top + k*dy/h, rc.right-k*dx/h-150, rc.bottom - k*dy/h-60);
}
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();
}
1. Подготовка к работе
1) Открываем "Visual Studio" и устанавливаем настройки, что соответствуют нашему проекту (MFC Application)
2. Начинаем работать
1) открываем ProgramDlg.h и опускаемся в самый низ системного кода
2) Отодвигаем "};" и пишем:
protected:
HICON m_hIcon;
// Созданные функции схемы сообщений
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
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;
HICON m_hIcon;
// Созданные функции схемы сообщений
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
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;
3) Открываем файл ProgramDlg.cpp
4) Под строкой "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;
5) Находим строку "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;
float h;
h = 9 / 2;
for (k = 0; k < 7; k++)
{
hPenOxy = CreatePen(PS_SOLID, 2,c[6-k]);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);
m = CreateSolidBrush(c[6-k]);
oldm = (HBRUSH)dc.SelectObject(m);
//dc.Rectangle(rc.left+k*dx, rc.top, rc.left + (k+1)*dx, rc.bottom);
dc.Rectangle(150+rc.left+k*dx/h,60+ rc.top + k*dy/h, rc.right-k*dx/h-150, rc.bottom - k*dy/h-60);
}
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();
}
Осталось только скомпилировать проект
Информація була взята звідси https://www.miwzua.com/
Комментариев нет:
Отправить комментарий