Алекс Jenter - Программирование на Visual C++. Архив рассылки

Тут можно читать онлайн Алекс Jenter - Программирование на Visual C++. Архив рассылки - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование на Visual C++. Архив рассылки
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.33/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Алекс Jenter - Программирование на Visual C++. Архив рассылки краткое содержание

Программирование на Visual C++. Архив рассылки - описание и краткое содержание, автор Алекс Jenter, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.

Программирование на Visual C++. Архив рассылки - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование на Visual C++. Архив рассылки - читать книгу онлайн бесплатно, автор Алекс Jenter
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers

Иначе компилятор выдаст кучу ошибок об отсутствии символов MIDL_INTERFACE, PROPID, IStream и т.д.

Если полученное в результате приложение успешно собралось, значит, мы все сделали правильно. Пойдем дальше.

Найдем в сгенерированном основном .cppфайле нашего проекта функцию WinMainи добавим в начале ее код инициализации:

GdiplusStartupInput gdiplusStartupInput;

ULONG_PTR gdiplusToken;

GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

а в конце, перед оператором return, добавим код очистки:

GdiplusShutdown(gdiplusToken);

Готово. Наконец-то мы можем что-нибудь нарисовать. Найдите в теле функции WndProcобработчик сообщения WM_PAINT и замените следующим кодом:

hdc = BeginPaint(hWnd, &ps);

OnPaint(hdc, ps.rcPaint);

EndPaint(hWnd, &ps);

return 0;

Теперь где-нибудь перед функцией WndProcсоздадим функцию OnPaintс кодом рисования:

void OnPaint(HDC hdc, const RECT& rc) {

// Все строки – в кодировке Unicode

WCHAR welcome[]=L"Welcome, GDI+ !";

// Создаем контекст рисования и устанавливаем

// пиксельную систему координат

Graphics g(hdc);

g.SetPageUnit(UnitPixel);

RectF bounds(0, 0, float(rc.right), float(rc.bottom));

// Загружаем фоновое изображение и растягиваем его на все окно Image

bg(L"BACKGRND.gif");

g.DrawImage(&bg, bounds);

// Создаем кисть с градиентом на все окно и полупрозрачностью

LinearGradientBrush brush(bounds, Color(130, 255, 0, 0), Color(255, 0, 0, 255), LinearGradientModeBackwardDiagonal);

// Готовим формат и параметры шрифта

StringFormat format;

format.SetAlignment(StringAlignmentCenter);

format.SetLineAlignment(StringAlignmentCenter);

Font font(L"Arial", 48, FontStyleBold);

// Выводим текст приветствия, длина –1 означает,

// что строка заканчивается нулем

g.DrawString(welcome, –1, &font, bounds, &format, &brush);

}

В результате у нас получится примерно вот что:

ПРИМЕЧАНИЕ

Приведенный пример носит только ознакомительный характер. В реальном приложении, для того чтобы нарисовать растр, его, как правило, не нужно каждый раз загружать с дискового файла :). Далее я буду пользоваться созданным макетом программы для создания других демонстрационных приложений. В качестве примера рисования будет приводиться только код функции OnPaint.

Пример WinForms – приложения с использованием GDI+

Для того чтобы можно было сравнить рассматриваемую реализацию GDI+ с той, что используется в .NET, приведу полный текст соответствующего приложения на новом языке C#:

using System;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Windows.Forms;

public class GraphicsForm: Form {

public static int Main() {

Form fm = new GraphicsForm();

fm.ShowDialog();

return 0;

}

protected override void OnPaint(PaintEventArgs a) {

DoPaint(a.Graphics, a.ClipRectangle);

}

protected void DoPaint(Graphics g, Rectangle clipBox) {

RectangleF bounds = clipBox;

string welcome = "Welcome, GDI+ !";

Bitmap bg = new Bitmap("BACKGRND.gif");

g.DrawImage(bg, bounds);

LinearGradientBrush brush =

new LinearGradientBrush(bounds, Color.FromArgb(130, 255, 0, 0), Color.FromArgb(255, 0, 0, 255), LinearGradientMode.BackwardDiagonal);

StringFormat format = new StringFormat();

format.Alignment = StringAlignment.Center;

format.LineAlignment = StringAlignment.Center;

Font font = new Font("Arial", 48, FontStyle.Bold);

g.DrawString(welcome, font, brush, bounds, format);

}

}

Как видим, помимо чисто синтаксических отличий имеются и принципиальные, например, использование в CLR-модели свойств против использования Set-методов в C++. Кроме того, в .NET активно используются пространства имен.

ПРИМЕЧАНИЕ

Замечу, что здесь приведен полныйтекст программы, аналогичной по возможностям той, что мы создали в предыдущем разделе. Сравните объем исходных текстов этих двух примеров. NO COMMENTS.

Если вы запустите приведенный пример, то увидите, что текст отрисовывается без сглаживания, характерного для предыдущего примера. Это связано с тем, что WinForms по умолчанию отключает улучшенный режим отрисовки шрифтов – и без этого причин для торможения достаточно :)

Несколько замечаний о компиляции и сборке проектов

Хочется указать на несколько "подводных камней", которые могут сбить с толку при первой попытке откомпилировать и собрать проект, использующий GDI+. В основном здесь упомянуты те проблемы, с которыми сталкиваются (и постоянно спрашивают о них в различных форумах) начинающие.

Где взять GdiPlus.h?

Как я уже сказал, все заголовочные файлы, библиотека импорта и документация к библиотеке входят в состав последнего Platform SDK. Они не идут в составе Visual C++ 6.0 и его сервис паков.

Почему выдается ошибка о типе ULONG_PTR?

Похоже, что компилятор находит старый заголовочный файл basetsd.h – например, из комплекта VC++. Измените пути поиска заголовочных файлов так, чтобы вначале были найдены файлы Platform SDK.

Почему компилятор не дает создать объект GDI+ при помощи new?

Такое поведение возможно при попытке откомпилировать MFC-приложение с использованием GDI+ в Debug-конфигурации.

В начале файла программы, видимо, имеется следующий фрагмент:

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

Либо откажитесь от создания объектов GDI+ с помощью new, либо откажитесь от проверок динамической памяти в этом файле (удалив вышеприведенную директиву #define).

Не забудьте про пространство имен Gdiplus и библиотеку импорта

В приводимых примерах кода используются простые имена классов, такие как Brush и Rect. Это стало возможным благодаря тому, что в начале заголовочного файла программы есть директива

using namespace Gdiplus;

Если это решение не подходит (например, в проекте уже существуют классы с такими именами), то перед именами классов необходимо ставить префикс пространства имен, например

Gdiplus::Rect rect;

Также, если по каким-то соображениям директива

#pragma comment(lib, "gdiplus.lib")

не устраивает, в опциях компоновщика нужно явно указать библиотеку импорта gdiplus.lib.

На этом пока все. В следующей части мы рассмотрим богатые возможности, которые GDI+ предоставляет для работы с растровыми изображениями.

ВОПРОС – ОТВЕТ

Как вставлять в программу на C++ двоичные константы?

Автор: Александр Шаргин

В языке C++ есть восьмеричные, десятичные и шестнадцатеричные константы. А двоичных – нет. Тем не менее, при помощи препроцессора можно соорудить макрос, который позволит нам смоделировать такие константы. Основная идея – преобразовывать восьмеричную константу в двоичную, выделяя из неё отдельные цифры и умножая их на соответствующий весовой коэффициент. Есть только одна проблема: в тип longвлезет не более десяти цифр, а этого хватит только на формирование двоичных констант длиной в байт. Хотелось бы иметь и более длинные двоичные константы. Чтобы решить эту проблему, можно ввести дополнительные макросы, которые будут склеивать короткие двоичные последовательности в более длинные. Эти макросы могут выглядеть примерно так.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Алекс Jenter читать все книги автора по порядку

Алекс Jenter - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование на Visual C++. Архив рассылки отзывы


Отзывы читателей о книге Программирование на Visual C++. Архив рассылки, автор: Алекс Jenter. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x