Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
2. Выберите Win32 Application и в строке ввода Project Name укажите имя проекта При необходимости измените путь к папке проекта. Затем нажмите кнопку OK.
3. Добавьте в проект файлы с исходным текстом: заголовочный файл Hello. h и файл реализации Hello. cpp. Для добавления каждого файла выбирайте команду FileÞNew, затем указывайте тип и имя файла. Убедитесь, что флажок Add To Project включен, так что этот файл будет добавлен в проект. Затем нажмите OK, и введите содержимое файла.
4. Выберите команду ProjectÞSettings и перейдите на закладку General. В списке Microsoft Foundation Classes выберите вариант компоновки Use MFC In A Shared DLL и затем нажмите OK.
Параметр связи с MFC типа Use MFC In A Shared DLL приводит к уменьшению исполняемого файла, т. к. позволяет приложению обращаться к MFC посредством DLL. Если вы выберете вариант компоновки Use MFC In A Static Library, то Visual C++ присоединит к исполняемому EXE-файлу вашего приложения двоичный код MFC, что приведет к значительному увеличению объема EXE-файла. С другой стороны, приложение, статически скомпонованное с MFC, можно запустить на любом компьютере, независимо от того, есть на нем MFC DLL или нет.
3) Прочитайте документ "Венгерская форма записи имен переменных и типы данных Windows" (см. CD-ROM). Какой тип имеют переменные с именами bRepaint, szMsg, nAge, cxLength, clrBtn? Запишите операторы описания этих переменных.
4) Откройте файл WinMain. cpp (хранится в папке \DevStudio\Vc\Mfc\Src) и разберитесь с функцией AfxWinMain по описанию из п.2.4 лекции. Зачем в ней нужен оператор goto?
Посмотрите исходный текст функций CWinApp::Run (файл AppCore. cpp) и CWinThread::Run (файл ThrdCore. cpp) и найдите, где именно вызываются OnIdle и ExitInstance.
5) В приложении Hello обеспечьте вывод символьной строки красным цветом внутри зеленого описывающего прямоугольника. В контексте устройства для задания цвета текста и фонового цвета предназначены функции-члены SetTextColor и SetBkColor. Значение цвета имеет тип COLORREF. Это значение можно сформировать с помощью макроса RGB(r, g, b), например, красный цвет записывается так: RGB(255, 0, 0).
6) На основе приложения Hello разработайте приложение, которое будет реагировать на следующие сообщения Windows:
WM_LBUTTONDOWN | щелчок левой кнопкой мыши |
WM_RBUTTONDOWN | щелчок правой кнопкой мыши |
WM_KEYDOWN | нажатие клавиши на клавиатуре |
WM_MOVE | перемещение окна |
WM_SIZE | изменение размеров окна |
WM_NCRBUTTONDOWN | щелчок правой кнопкой мыши в неклиентской области окна |
WM_CLOSE | закрытие окна |
При обработке всех сообщений приложение с помощью функции каркаса AfxMessageBox должно выдавать информационное окно с названием сообщения. В конце обработчиков сообщений вызывайте обработчик из родительского класса CFrameWnd, чтобы не изменять общепринятое поведение окна (иначе, например, его не удастся закрыть при помощи мыши).
Прототипы функций-членов CMainWnd для обработки указанных сообщений узнайте в справочной системе, выполняя поиск по именам соответствующих макросов карты сообщений (ON_WM_LBUTTONDOWN и т. п.)
7) Изучите англо-русский словарь терминов по теме 4-й лекции (см. CD-ROM).
Лекция 5. Отображение информации с помощью модуля GDI
1. Контекст устройства
В однозадачных ОС (MS-DOS), любая программа может рисовать непосредственно на экране. В многозадачных ОС программы так действовать не должны, т. к. при одновременной работе нескольких программ пользователь должен видеть на экране согласованную картину, сформированную в результате их совместной работы. Экранная область, принадлежащая программе A, должна быть защищена от информации, выводимой программой B. Доступом к видеоадаптеру, как и к другим устройствам, управляет ОС. Она позволяет программам выводить информацию только в пределах их окон. В Windows графическое отображение выполняет модуль GDI.
Windows-приложение не может рисовать что-либо непосредственно на экране, принтере или каком-нибудь другом устройстве вывода. Все операции рисования производятся на воображаемом "устройстве", представляемом с помощью контекста устройства. Контекст устройства – эта служебная внутренняя структура Windows, в которой хранятся все характеристики устройства и его текущего состояния, необходимые модулю GDI для рисования. До начала рисования приложение должно получить от модуля GDI дескриптор контекста устройства. Этот дескриптор надо передавать в качестве первого параметра всем функциям рисования GDI. Без корректного дескриптора контекста устройства, GDI не будет знать, на каком именно устройстве и в какой его области рисовать пикселы. В контексте устройства хранятся параметры, позволяющие GDI выполнять отсечение и рисовать графические примитивы только внутри заданных областей. Одни и те же функции GDI могут рисовать примитивы на различных устройствах, т. к. специфика устройства скрыта в контексте устройства.
MFC избавляет программиста от необходимости непосредственной работы с дескрипторами контекстов устройств. Дескриптор контекста устройства и функции рисования GDI инкапсулированы в класс "Контекст устройства" – CDC. От него унаследованы классы для представления различных контекстов устройств (см. табл. 5.1).
Таблица 5.1. Классы различных контекстов устройств
Имя класса | С чем связан этот контекст устройства |
CPaintDC | Клиентская область окна (только в обработчиках OnPaint) |
CClientDC | Клиентская область окна |
CWindowDC | Окно, включая неклиентскую область |
CMetaFileDC | Метафайл GDI (аналог макроса, в котором запоминаются вызовы функций GDI и потом их можно многократно воспроизводить) |
Объекты этих классов можно создавать как автоматически, так и динамически. В конструкторе и деструкторе каждого класса вызываются функции GDI для получения и освобождения дескрипторов контекста устройства. Например, создать контекст устройства в обработчике OnPaint можно так:
CPaintDC dc(this); // Вызовы каких-либо функций-членов для рисования примитивов |
Конструктору CPaintDC передается указатель на окно, с которым будет связан контекст устройства.
Класс CPaintDC предназначен для рисования в клиентской области окна при обработке сообщений WM_PAINT. Но приложения Windows могут выполнять графическое отображение не только в OnPaint. Например, требуется рисовать в окне окружность при каждом щелчке мышью. Это можно делать в обработчике сообщения мыши, не дожидаясь очередного сообщения WM_PAINT. Для подобных операций отображения предназначен класс CClientDC. Он создает контекст устройства, связанный с клиентской областью окна, которым можно пользоваться за пределами OnPaint.
Ниже приведен пример рисования диагоналей в клиентской области окна с помощью CClientDC и двух функций-членов, унаследованных от CDC.
void CMainWindow::OnLButtonDown( UINT nFlags, CPoint point ) { CRect rect; GetClientRect(&rect); CClientDC dc(this); dc. MoveTo( rect. left, rect. top ); dc. LineTo( rect. right, rect. bottom ); dc. MoveTo( rect. right, rect. top ); dc. LineTo( rect. left, rect. bottom ); } |
В редких случаях программе требуется получить доступ ко всему экрану (например, в программе захвата экрана). Тогда можно создать контекст устройства как объект класса CClientDC или CWindowDC, но в конструктор передать нулевой указатель. Например, нарисовать окружность в левой верхней части экрана можно так:
CClientDC dc( NULL ); dc. Ellipse( 0, 0, 100, 100 ); |
1.1 Атрибуты контекста устройства
В контексте устройства хранится ряд атрибутов, влияющих на работу функций рисования. В классе CDC есть функции-члены для чтения текущих значений и для изменения этих атрибутов (табл. 5.2).
Таблица 5.2. Основные атрибуты контекста устройства
Атрибут | Значение по умолчанию | Функция-член CDC для задания значения | Функция-член СDC для получения значения |
Цвет текста | Черный | SetTextColor | GetTextColor |
Цвет фона | Белый | SetBkColor | GetBkColor |
Режим фона | OPAQUE | SetBkMode | GetBkMode |
Режим преобразования координат | MM_TEXT | SetMapMode | GetMapMode |
Режим рисования | R2_COPYPEN | SetROP2 | GetROP2 |
Текущая позиция | (0,0) | MoveTo | GetCurrentPosition |
Текущее перо | BLACK_PEN | SelectObject | SelectObject |
Текущая кисть | WHITE_BRUSH | SelectObject | SelectObject |
Текущий шрифт | SYSTEM_FONT | SelectObject | SelectObject |
Различные функции рисования CDC пользуются атрибутами по-разному. Например, цвет, ширина и стиль (сплошная, штриховая и т. п.) линии для рисования отрезка функцией LineTo определяются текущим пером. При рисовании прямоугольника функцией Rectangle модуль GDI рисует контур текущим пером, а внутреннюю область заполняет текущей кистью. Цвет текста, фона и шрифт используются всеми функциями отображения текста. Фоновый цвет применяется также при заполнении промежутков в несплошных линиях. Если фоновый цвет не нужен, его можно отключить (сделать "прозрачным"):
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |


