Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 61

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 55 56 57 58 59 60 < 61 > 62 63 64 65 66 67 .. 173 >> Следующая

Все функции, рассмотренные в оставшейся части главы, являются членами класса сое. Рассмотренные и кратко упоминаемые функции, можно изучить более подробно в следующих разделах справочной системы: Visual С++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation Class Library, Class Library Reference, CDC.
Рисование точек
Можно закрасить один пиксель, вызывая функцию SetPixelv класса сое, как в следующем примере.
pDc->SetPixelV (Ю, 15, RGB (255, 0, 0));
Примечание
Пример вызова функции Set Fixe] V, как и функций, приведенных в следующем параграфе, предполагает, что pDC является указателем на конкретный объект контекста устройства, переданный в функцию onDraw, или явно определен.
Первые два параметра описывают горизонтальные и вертикальные координаты пикселя в логических единицах, а третий параметр — его цвет. Если заданный цвет не является чистым, доступным в текущем видеорежиме, то функция SetPixelV будет использовать ближайший чистый цвет. Очевидно, что псевдополутон невозможно использовать для единственного пикселя!
Совет
Если нужно получить текущий цветовой код точки, то вместо вызова функции SetPixelV вызовите более медленную функцию cdc: setPixel. Функция SetPixel устанавливает пикселю указанный цвет и возвращает прежний. Кроме того, можно получить текущее значение цвета пикселя, вызывая функцию cdc : :GetPixel.
Примечание
MFC поддерживает альтернативные версии большинства функций рисования, описывающих координаты путем передачи соответствующей структуры вместо передачи отдельных координат. Например, в функцию SetPixelV можно передать одну структуру point вместо первых двух параметров. Синтаксис альтернативных вариантов функций смотрите в документации на функции.
Программа Mandel
Описанная в этом разделе программа Mandel иллюстрирует использование функции SetPixelV, а также другие способы создания графических изображений, рисует рекурсивный узор (множество Мандельброта), который полностью заполняет рабочую область в окне представления. При изменении размера окна или удалении перекрывающего окна, программа удаляет недействительную область окна представления и перерисовывает узор. На медленных машинах узор генерируется медленно. Будьте внимательны: не заставьте программу начать перерисовывать узор до его завершения. На рис. 19.5 показано окно программы после того, как рекурсивный узор был полностью нарисован.
Откройте мастер AppWizard, чтобы сгенерировать исходные файлы для программы Mandel. Создайте новый проект, называемый Mandel, и в диалоговых окнах мастера AppWizard (Step 1 — Step 6) введите опции, которые задавались для программы WinGreet в гл. 9.
После создания исходного файла начните настройку программы, используя окно мастера ClassWiznrd для переопределения виртуальной функции Onidle класса приложения. В окне мастера ClassWizad откройте вкладку Messages Maps и выберите класс CMandelApp в списках Class name и Object Ids. Затем выберите Onidle в списке Messages и щелкните на кнопке Add Functions. Наконец, щелкните на кнопке Edit Code, в функции Onidle удалите спецификатор return в начале вызова cwinApp: : Onidle и добавьте операторы, выделенные полужирным шрифтом.
BOOL CMandelApp::OnIdle(LONG ICount) (
// TODO: Здесь добавьте собственный код обработчика // и/или вызов базового класса
CWinApp::0nldle(ICount); // удалите слово 'return' из этого
// предложения!
CMandelView *FView =
(CMandelView *)((CFrameWnd *)m_pMainWnd) ->GetActiveView () ; FView->DrawCol (); return TRUE;
Функция Onidle вызывается периодически (из главного цикла обработки сообщения MFC) во время простоя программы, т.е. когда она не занята обработкой сообщения. Вначале Onidle вызывает вариант функции Onidle из базового класса для выполнения стандартных действий программы. Далее добавленный к функции Onidle код вызывает функцию CFrameWnd: : GetActiveView, чтобы получить указатель на объект представления. Переменная m_pMainWnd класса приложения сохраняет адрес объекта главного окна и используется для вызова функции GetActiveView. Вызывается функция-член DrawColor класса представления (определена ниже), чтобы нарисовать единственный столбец рекурсивного узора. Наконец, обработчик Onidle возвращает значение TRUE, так что MFC будет продолжать периодически ее вызывать. Если функция Onidle возвращает значение FALSE, то MFC не будет ее вызывать до получения программой следующего сообщения.
Поскольку рисование рекурсивного узора занимает много времени (это в значительной степени зависит от аппаратуры), программа Mandel не рисует полную
file ?* Help
Рис. 19.5. Программа Mandel с завершенным рекурсивным узором
фигуру из функции OnDraw. Блокирование обработки сообщений программой Mandel на протяжении всего времени рисования узора запретило бы пользователю выбирать команды меню или других программ. (Функция обработки сообщений, например, OnDraw, должна возвращать управление перед обработкой следующего сообщения.) Программа Mandel рисует только единственный столбец пикселей внутри узора каждый раз при вызове функции Onidle. После рисования этого столбца функция Onidle возвращает управление, позволяя обработать любое ожидаемое сообщение. Затем функция Onidle получает управление и рисует следующий столбец. Этот процесс повторяется до завершения рисования узора.
Предыдущая << 1 .. 55 56 57 58 59 60 < 61 > 62 63 64 65 66 67 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100