Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод рекомендации АЯ 2 семестр2.docx
Скачиваний:
112
Добавлен:
23.03.2016
Размер:
1.14 Mб
Скачать

7.2.2. Состав простейшего приложения в mfc

Простейшее приложение, создающее окно, состоит как минимум из двух классов:

  • класс окна, заголовок имеет вид:

class CMainWin: public CFrameWnd

  • класс приложения, заголовок имеет вид:

class CApp: public CWinApp

7.2.3. Обработка сообщений в mfc

Для обработки сообщений необходимо выполнить 3 действия:

  • включить в класс макрос

DECLARE_MESSAGE_MAP() // Макрос-

//объявляет очередь сообщений для класса

  • включить макрокоманду в очередь сообщений:

BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd)

// Начало очереди сообщений для класса

ON_WM_CHAR() // Ввод символа

ON_WM_LBUTTONDOWN() // Нажатие левой кнопки мыши

ON_WM_LBUTTONUP() // Отпуск левой

// кнопки мыши

ON_WM_MOUSEMOVE() // Перемещение мыши

ON_COMMAND(ID_M1, OnCircle) // Обработка

// элемента меню

ON_WM_PAINT() // Перерисовка

END_MESSAGE_MAP() // Закрыть очередь

// сообщений

  • включить в класс функцию-обработчик сообщения, например:

afx_msg void OnChar(UINT Ch, UINT Count, UINT Flags); // Описание в классе

void CMainWin::OnChar(UINT Ch, UINT Count, UINT Flags) {…}

// Определение за пределами класса

Некоторые функции обработчики

Ввод символа:

afx_msg void OnChar(UINT Ch, // Код символа

UINT Count, // Число введенных символов

UINT Flags); // Флаг несущий доп. информацию

// например о нажатие клавиш Ctrl, Shift,..

Нажатие левой кнопки мыши:

afx_msg void OnLButtonDown(UINT Flags,

// Флаг, несущий доп. информацию

CPoint P); // Координаты курсора мыши

Перемещение мыши:

afx_msg void OnMouseMove(UINT Flags, CPoint P);

Выбор элемента меню:

afx_msg void OnCircle();

Перерисовка:

afx_msg void OnPaint();

7.2.4. Вывод графики в mfc

Для рисования в окне используются классы контекстов устройств, производные от класса СDC. Некоторые конструкторы классов контекстов устройств:

    • CPaintDC(CWnd* pWnd) // Используется при перерисовке

    • CWindowDC(CWnd* pWnd) // Поверхность всего окна

    • CСlientDC(CWnd* pWnd) // Клиентская область окна

Заголовки некоторых методов класса CDC:

COLORREF SetPixel(int x, int y, COLORREF crColor);

COLORREF SetPixel(POINT point, COLORREF crColor);

CPoint MoveTo(int x, int y);

CPoint MoveTo(POINT point);

BOOL LineTo(int x, int y);

BOOL LineTo(POINT point);

BOOL Ellipse(int x1, int y1, int x2, int y2);

BOOL Ellipse(LPCRECT lpRect);

BOOL Polygon(LPPOINT lpPoints, int nCount);

BOOL Rectangle(int x1, int y1, int x2, int y2);

BOOL Rectangle(LPCRECT lpRect);

BOOL TextOut(int x, int y, LPCTSTR lpszString, int nCount);

BOOL TextOut(int x, int y, const CString& str);

COLORREF SetTextColor(COLORREF crColor);

COLORREF SetBkColor(COLORREF crColor);

Методы для загрузки объектов в контекст устройства:

virtual CGdiObject* SelectStockObject(int nIndex);

// Загрузить стандартный объект

CPen* SelectObject(CPen* pPen);

CBrush* SelectObject(CBrush* pBrush);

CFont* SelectObject(CFont* pFont);

CBitmap* SelectObject(CBitmap* pBitmap);

int SelectObject(CRgn* pRgn);