Лабораторная работа №7. Работа с блоками диалога c помощью библиотеки MFC. Подключение ресурсов.. Пример.. Условие задачи.
Лабораторная работа №7
Работа с блоками диалога c помощью библиотеки MFC
Цель работы:приобрести навыки в использовании блоков диалога с помощью библиотеки MFC.
Задание.К лабораторной работе №6 добавить вызовы блоков диалога: одного пользовательского и двух стандартных. Блоки диалога должны вызываться по нажатию на клавиши. Элементы управление на пользовательском блоке диалога можно создавать как программно, так и с помощью редактора ресурсов. Обрабатываемые клавиши и действия блоков диалога определить по варианту.
Подключение ресурсов.
1. Добавляем в проект файл ресурсов
2. Вставляем новый ресурс
3. На блок диалога можно помещать элементы управления с помощью инструментов из закладки Toolbox.
4. Подключаем в тексте программы заголовочный файл resource.h, который создаётся вместе с файлом ресурсов.
Пример.
Условие задачи.
№
| Пользовательский блок диалога
1) вызывается по клавише ...;
2) выполняет действия …
| Первый стандартный блок диалога
1) вызывается по клавише …;
2) выполняет действия …
| Второй стандартный блок диалога
1) вызывается по клавише …;
2) выполняет действия …
|
| 1) F2;
2) вводит координаты начала и длину отрезков полилинии с помощью текстовых полей (предполагается, что отрезки полилинии все одинаковой длины).
| 1) стрелка вниз;
2) стандартный блок диалога выбора цвета вводит цвет пера полилинии.
| 1) delete;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
| #include <afxwin.h>
#include <afxdlgs.h>
#include "resource.h"
class CDial : public CDialog {
double x,y,len;
public:
CDial():CDialog(IDD_DIALOG1, NULL) {
x=1;
y=1;
len=10;
}
void SetValue(double, double, double);
void GetValue(double *, double *, double *);
void DoDataExchange(CDataExchange* pDX);
};
void CDial::SetValue(double x, double y, double len) {
this->x=x;
this->y=x;
this->len=len;
}
void CDial::GetValue(double *x, double *y, double *len) {
*x=this->x;
*y=this->y;
*len=this->len;
}
void CDial::DoDataExchange( CDataExchange* pDX) {
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDX, x);
DDX_Text(pDX, IDC_EDY, y);
DDX_Text(pDX, IDC_EDLENGTH, len);
}
class CWin: public CFrameWnd
{
LOGFONT lf;
COLORREF colfont,colpen;
double x,y,len;
public:
CWin();
void OnPaint();
void OnKeyDown(UINT nChar,UINT nRepCnt, UINT nFlags);
DECLARE_MESSAGE_MAP();
};
BEGIN_MESSAGE_MAP(CWin,CFrameWnd)
ON_WM_PAINT()
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
CWin::CWin()
{
CRect rt;
GetClientRect(&rt);
Create(0,"Заголовок");
ZeroMemory(&lf,sizeof(lf));
lf.lfHeight=20;
lf.lfItalic=1;
lf.lfWeight=FW_BOLD;
strcpy(lf.lfFaceName,"Arial");
colfont=RGB(255,0,0);
colpen=RGB(0,255,0);
x=rt.Width()/2.0;
y=rt.Height()/2.0;
len=10;
}
void CWin::OnKeyDown(UINT nChar,UINT nRepCnt, UINT nFlags)
{
CDial dlg;
CColorDialog cd(colpen);
CFontDialog fd(&lf);
switch(nChar)
{
case VK_F2:
dlg.SetValue(x,y,len);
if (dlg.DoModal()==IDOK)
{
dlg.GetValue(&x,&y, &len);
Invalidate();
}
break;
case VK_DOWN:
if (cd.DoModal()==IDOK) {
colpen=cd.GetColor();
Invalidate();
}
break;
case VK_DELETE:
fd.m_cf.rgbColors=colfont;
if (fd.DoModal()==IDOK) {
fd.GetCurrentFont(&lf);
colfont=fd.GetColor();
Invalidate();
}
break;
}
}
void CWin::OnPaint()
{
CPaintDC dc(this);
CRect rt;
CPoint p[5];
CPen pen;
CFont font;
TEXTMETRIC tm;
GetClientRect(&rt);
pen.CreatePen(PS_SOLID,2,colpen);
dc.SelectObject(pen);
p[0].x=rt.Width()/2;
p[0].y=rt.Height()/2;
p[1].x=rt.Width()/2-long(len);
p[1].y=rt.Height()/2;
p[2].x=rt.Width()/2;
p[2].y=rt.Height()/2+long(len);
p[3].x=rt.Width()/2-long(len);
p[3].y=rt.Height()/2;
p[4].x=rt.Width()/2;
p[4].y=rt.Height()/2-long(len);
dc.Polyline(p,5);
font.CreateFontIndirect(&lf);
dc.SelectObject(font);
dc.SetTextColor(colfont);
dc.GetTextMetrics(&tm);
dc.TextOut(rt.Width()-tm.tmAveCharWidth*4,rt.Height()-tm.tmHeight,"text",4);
font.DeleteObject();
pen.DeleteObject();
}
class CApp: public CWinApp
{
public:
BOOL InitInstance();
};
BOOL CApp::InitInstance()
{
CWin *pWnd=new CWin;
pWnd->ShowWindow(SW_SHOW);
m_pMainWnd=pWnd;
return TRUE;
}
CApp app;
Содержание отчёта
1. Титульный лист.
2. Условие лабораторной работы.
3. Текст программы.
4. Экранные формы с примерами работы программы.
Варианты заданий.
№
| Пользовательский блок диалога
1) вызывается по клавише ...;
2) выполняет действия …
| Первый стандартный блок диалога
1) вызывается по клавише …;
2) выполняет действия …
| Второй стандартный блок диалога
1) вызывается по клавише …;
2) выполняет действия …
|
| 1) F4;
2) вводит ширину и высоту прямоугольника с помощью текстовых полей.
| 1) стрелка вверх;
2) стандартный блок диалога выбора цвета вводит цвет кисти прямоугольника
| 1) insert;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F5;
2) вводит координаты левого верхнего угла битового массива с помощью двух текстовых полей
| 1) стрелка вниз;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие координаты левого верхнего угла битового массива.
| 1) стрелка вверх;
2) стандартный блок открытия файла диалога определяет имя и путь к текстовому файлу, из которого надо загрузить координаты левого верхнего угла битового массива и переместить его в указанное место.
|
| 1) F1;
2) вводит координаты правого нижнего угла прямоугольника с закруглёнными углами помощью текстовых полей.
| 1) стрелка влево;
2) стандартный блок диалога выбора цвета вводит цвет пера прямоугольника с закруглёнными углами
| 1) стрелка вправо;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F2;
2) вводит координаты первого отрезка полилинии с помощью текстовых полей.
| 1) insert;
2) стандартный блок диалога выбора цвета вводит цвет пера полилинии
| 1) delete;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F3;
2) вводит координаты первой точки линии с помощью текстовых полей
| 1) F4;
2) стандартный блок диалога выбора цвета вводит цвет пера линии
| 1) F5;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F6;
2) вводит координаты левого верхнего угла прямоугольника, в который в писан эллипс, частью которого является сектор, с помощью текстовых полей
| 1) F7;
2) стандартный блок диалога выбора цвета вводит цвет пера для сектора
| 1) F8;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F9;
2) вводит ширину и высоту битового массива с помощью двух текстовых полей (битовый массив рисовать с помощью функции StretchBlt)
| 1) стрелка влево;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие ширину и высоту битового массива.
| 1) стрелка вправо;
2) стандартный блок открытия файла диалога определяет имя и путь к текстовому файлу, из которого надо загрузить ширину и высоту битового массива и перерисовать его с указанными размерами.
|
| 1) F1;
2) вводит координаты нижнего конца линии с помощью двух текстовых полей.
| 1) insert;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие координаты нижнего конца линии.
| 1) delete;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F4;
2) вводит координаты правого нижнего угла прямоугольника с помощью текстовых полей.
| 1) стрелка вверх;
2) стандартный блок диалога выбора цвета вводит цвет пера прямоугольника
| 1) insert;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F8;
2) вводит стиль штриховки сектора с помощью списка.
| 1) стрелка вправо;
2) стандартный блок диалога выбора цвета вводит цвет кисти сектора.
| 1) стрелка влево;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F9;
2) вводит стиль пера для рисования хорды с помощью комбинированного списка.
| 1) стрелка вниз;
2) стандартный блок диалога выбора цвета вводит цвет пера хорды.
| 1) стрелка вверх;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F2;
2) вводит стиль пера для рисования линии с помощью списка.
| 1) F4;
2) стандартный блок диалога выбора цвета вводит цвет пера линии.
| 1) F6;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущий стиль пера.
|
| 1) F3;
2) вводит координаты правого нижнего угла битового массива с помощью двух текстовых полей
| 1) F7;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие координаты правого нижнего угла битового массива.
| 1) F9;
2) стандартный блок открытия файла диалога определяет имя и путь к текстовому файлу, из которого надо загрузить координаты правого нижнего угла битового массива и переместить его в указанное место.
|
| 1) F1;
2) вводит стиль штриховки для рисования хорды с помощью списка.
| 1) F2;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущий стиль кисти.
| 1) F3;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F4;
2) вводит стиль пера для рисования полилинии с помощью группы радиокнопок.
| 1) F5;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущий стиль пера.
| 1) F6;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F7;
2) вводит стиль штриховки для рисования прямоугольника с помощью группы радиокнопок.
| 1) F8;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущий стиль штриховки.
| 1) F9;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F2;
2) вводит координаты верхнего конца линии с помощью двух текстовых полей.
| 1) стрелка вниз;
2) стандартный блок диалога выбора цвета вводит цвет пера линии.
| 1) стрелка вверх;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие координаты верхнего конца линии.
|
| 1) F1;
2) вводит координаты правого верхнего угла битового массива с помощью двух текстовых полей
| 1) F2;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие координаты правого верхнего угла битового массива.
| 1) F3;
2) стандартный блок открытия файла диалога определяет имя и путь к текстовому файлу, из которого надо загрузить координаты правого верхнего угла битового массива и переместить его в указанное место.
|
| 1) F2;
2) вводит левого нижнего угла прямоугольника с помощью текстовых полей.
| 1) стрелка влево;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие координаты левого нижнего угла прямоугольника.
| 1) стрелка вправо;
2) стандартный блок открытия файла диалога определяет имя и путь к текстовому файлу, из которого надо загрузить координаты левого прямоугольника угла битового массива и переместить его в указанное место.
|
| 1) F9;
2) вводит стиль штриховки для рисования пяти угольника с помощью группы радиокнопок.
| 1) F8;
2) стандартный блок диалога выбора цвета вводит цвет пера пятиугольника.
| 1) F7;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущий стиль кисти.
|
| 1) F2;
2) вводит координаты центра эллипса с помощью двух текстовых полей.
| 1) delete;
2) стандартный блок диалога выбора цвета вводит цвет кисти эллипса
| 1) стрелка вверх;
2) стандартный блок диалога выбора шрифта вводит шрифт для надписи.
|
| 1) F6;
2) вводит координаты левого нижнего угла битового массива с помощью двух текстовых полей
| 1) стрелка вниз;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие координаты левого нижнего угла битового массива.
| 1) стрелка вверх;
2) стандартный блок открытия файла диалога определяет имя и путь к текстовому файлу, из которого надо загрузить координаты левого нижнего угла битового массива и переместить его в указанное место.
|
| 1) F2;
2) вводит координаты длины полуосей эллипса с помощью двух текстовых полей.
| 1) стрелка влево;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущие длины полуосей эллипса.
| 1) стрелка вправо;
2) стандартный блок открытия файла диалога определяет имя и путь к текстовому файлу, из которого надо загрузить длины полуосей эллипса и перерисовать его с указанными размерами.
|
| 1) F4;
2) вводит стиль пера для рисования линии с помощью группы радиокнопок.
| 1) F2;
2) стандартный блок диалога выбора цвета вводит цвет пера линии.
| 1) F3;
2) стандартный блок диалога сохранения файла определяет имя и путь к текстовому файлу, в котором надо сохранять текущий стиль пера. Правый верхний угол
|
|