Всем привет, сегодня мы с вами будем делать обычную программу в MicrosoftVisualStudio или C++. Наша программа может изменять фигуры ( круг и квадрат), может менять их цвет(заливку и контур). Ну что, приступим!!!
Для начала нам нужно скачать сам MicrosoftVisualStudio, для этого заходим на официальный сайт программы https://www.visualstudio.com/ru/downloads/ и скачиваем наш C++.
Затем заходим в саму программу и начнем настраивать все для работы!
Нам нужно создать исходник MFC Application с любым удобным названием.У нас появилась конструкция нашей программы. Далее заходим в Вид-Обозреватель решений,нам нужно открыть всего 2 папки : ProgramDlg.h i ProgramDlg.cpp. Это 2 основных файла с кодом нашего проекта.
Для начала открываем ProgramDlg.h и отправляемся в самый низ программного кода.Далее нам нужно заполнить это некоторыми доработками, нам нужно просто вставить этот код в самый низ :
private:
HFONT hold, hNew, hbk;
HPEN hPenOxy, hOldPen;
HBRUSH m, oldm, brush;
HPEN pen;
COLORREF cf, ck, c[25];
CPen d, oldd;
CBitmap pic;
CRect rc, w, kw[12];
CString ms, t, z;
int x1, y1, x2, y2;
int Matrix[50][50];
int RH, RW, k, i, j, cx, cy, dx, dy;
bool fg;
public:
CButton RD1;
CButton RD2;
afx_msg void OnBnClickedRadio1();
afx_msg void OnBnClickedRadio2();
Теперь заходим в ProgramDlg.cpp и отправляемся в середину кода и находим //TODO и под ним пишем :
// TODO: добавьте дополнительную инициализацию
RD1.SetCheck(0);
RD2.SetCheck(1);
return TRUE; // возврат значения TRUE, если фокус не передан элементу управления
Далее отправляемся в самый низ где нам нужно написать :
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 + 110;
w.bottom = rc.bottom-50;
dc.FillSolidRect(&w, 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);
dc.Rectangle(x1, y1, x2, y2);
//dc.Ellipse(x1, y1, x2, y2);
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
CDialog::OnPaint();
}
}
Пока закончим с кодами и перейдем к диалоговому окошку :
Для этого заходим : Вид-Ресурсы-Program-Program.rc-Dialog-IDD_Program_Dialog.
Это есть основой для нашего окна. Ctrl+A+Delete( удаляем ненужный мусор с окна).
Находим панель инструментов и на наше окно добавляем:
2 Radio Button
1 Group box ( В него с помощью курсора нужно поместить 2 Radio Button'a),чтоб получилось вот так :
И называем наши бутоны : Ellipse i Kvadrat (как показано на фото).
Теперь ПКМ по Ellipse-Add Variable-Variable name <RD1>. Еще раз ПКМ-Add Event Handler-Add and Finish. Тоже самое проделываем с Kvadrat,только в Variable name указываем - <RD2>.
Мы уже почти приблизились к финишу,осталось только зайти в ProgramDlg.cpp и внести кое-какие изменения.Отправляемся в низ кода и под строкой
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 + 110;
w.bottom = rc.bottom - 50;
dc.FillSolidRect(&w, 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);
//dc.Rectangle(x1, y1, x2, y2);
dc.Ellipse(x1, y1, x2, y2);
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}
А под строкой
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 + 110;
w.bottom = rc.bottom - 50;
dc.FillSolidRect(&w, 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);
dc.Rectangle(x1, y1, x2, y2);
//dc.Ellipse(x1, y1, x2, y2);
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}
ГОТОВО!!!!
Теперь заходим в Локальный отладчик Windows ( или же F5) и у нас должна получиться вот такая программа,которая при нажатии меняет фигуру круга и квадрата.
Всем спасибо за просмотр,надеюсь вам понравилась моя работа ! Удачи в построении программы. Извиняюсь за пиратку WinSnap.
Для начала нам нужно скачать сам MicrosoftVisualStudio, для этого заходим на официальный сайт программы https://www.visualstudio.com/ru/downloads/ и скачиваем наш C++.
Затем заходим в саму программу и начнем настраивать все для работы!
Нам нужно создать исходник MFC Application с любым удобным названием.У нас появилась конструкция нашей программы. Далее заходим в Вид-Обозреватель решений,нам нужно открыть всего 2 папки : ProgramDlg.h i ProgramDlg.cpp. Это 2 основных файла с кодом нашего проекта.
Для начала открываем ProgramDlg.h и отправляемся в самый низ программного кода.Далее нам нужно заполнить это некоторыми доработками, нам нужно просто вставить этот код в самый низ :
private:
HFONT hold, hNew, hbk;
HPEN hPenOxy, hOldPen;
HBRUSH m, oldm, brush;
HPEN pen;
COLORREF cf, ck, c[25];
CPen d, oldd;
CBitmap pic;
CRect rc, w, kw[12];
CString ms, t, z;
int x1, y1, x2, y2;
int Matrix[50][50];
int RH, RW, k, i, j, cx, cy, dx, dy;
bool fg;
public:
CButton RD1;
CButton RD2;
afx_msg void OnBnClickedRadio1();
afx_msg void OnBnClickedRadio2();
Теперь заходим в ProgramDlg.cpp и отправляемся в середину кода и находим //TODO и под ним пишем :
// TODO: добавьте дополнительную инициализацию
RD1.SetCheck(0);
RD2.SetCheck(1);
return TRUE; // возврат значения TRUE, если фокус не передан элементу управления
Далее отправляемся в самый низ где нам нужно написать :
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 + 110;
w.bottom = rc.bottom-50;
dc.FillSolidRect(&w, 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);
dc.Rectangle(x1, y1, x2, y2);
//dc.Ellipse(x1, y1, x2, y2);
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
CDialog::OnPaint();
}
}
Пока закончим с кодами и перейдем к диалоговому окошку :
Для этого заходим : Вид-Ресурсы-Program-Program.rc-Dialog-IDD_Program_Dialog.
Это есть основой для нашего окна. Ctrl+A+Delete( удаляем ненужный мусор с окна).
Находим панель инструментов и на наше окно добавляем:
2 Radio Button
1 Group box ( В него с помощью курсора нужно поместить 2 Radio Button'a),чтоб получилось вот так :
И называем наши бутоны : Ellipse i Kvadrat (как показано на фото).
Теперь ПКМ по Ellipse-Add Variable-Variable name <RD1>. Еще раз ПКМ-Add Event Handler-Add and Finish. Тоже самое проделываем с Kvadrat,только в Variable name указываем - <RD2>.
Мы уже почти приблизились к финишу,осталось только зайти в ProgramDlg.cpp и внести кое-какие изменения.Отправляемся в низ кода и под строкой
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 + 110;
w.bottom = rc.bottom - 50;
dc.FillSolidRect(&w, 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);
//dc.Rectangle(x1, y1, x2, y2);
dc.Ellipse(x1, y1, x2, y2);
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}
А под строкой
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 + 110;
w.bottom = rc.bottom - 50;
dc.FillSolidRect(&w, 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);
dc.Rectangle(x1, y1, x2, y2);
//dc.Ellipse(x1, y1, x2, y2);
DeleteObject(m);
SelectObject(dc, oldm);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
}
ГОТОВО!!!!
Теперь заходим в Локальный отладчик Windows ( или же F5) и у нас должна получиться вот такая программа,которая при нажатии меняет фигуру круга и квадрата.
Всем спасибо за просмотр,надеюсь вам понравилась моя работа ! Удачи в построении программы. Извиняюсь за пиратку WinSnap.
Комментариев нет:
Отправить комментарий