LibKing » Книги » comp-programming » А. Легалов - Применение Windows API

А. Легалов - Применение Windows API

Тут можно читать онлайн А. Легалов - Применение Windows API - бесплатно полную версию книги (целиком). Жанр: comp-programming, год 2002. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
libking
  • Название:
    Применение Windows API
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    2002
  • ISBN:
    нет данных
  • Рейтинг:
    4.22/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

А. Легалов - Применение Windows API краткое содержание

Применение Windows API - описание и краткое содержание, автор А. Легалов, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Применение Windows API - читать онлайн бесплатно полную версию (весь текст целиком)

Применение Windows API - читать книгу онлайн бесплатно, автор А. Легалов
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

class View {

public:

View(HINSTANCE hInst);

void SetSize(int cxNew, int cyNew) {

_cx = cxNew;

_cy = cyNew;

}

void Step() { ++_tick; }

void Update(Canvas& canvas);

void Paint(Canvas& canvas);

private:

int _cx, _cy;

int _tick;

Bitmap _bitmapBuf; // for double buffering

Bitmap _background;

int _widthBkg, _heightBkg;

Bitmap _sprite;

Bitmap _mask;

int _widthSprite, _heightSprite;

};

View::View(HINSTANCE hInst) : _tick (0) {

// Load bitmap from file

_background.Load("picture.bmp");

// Load bitmap from resource

_background.GetSize(_widthBkg, _heightBkg);

// Load bitmaps from resources

_sprite.Load(hInst, IDB_FANNY);

_mask.Load(hInst, IDB_MASK);

_sprite.GetSize(_widthSprite, _heightSprite);

DesktopCanvas canvas;

_bitmapBuf.CreateCompatible(canvas, 1, 1);

_cx = 1;

_cy = 1;

}

And here's the implementation of Update. We create a bitmap canvas in memory, making it compatible with the current display canvas. We blit the background image into it, then blit the mask and the sprite (notice the change of position for each frame). Finally, we transfer the complete bitmap into our buffer (overloaded assignment operator at work!).

void View::Update(Canvas& canvas) {

const double speed = 0.01;

Bitmap bmp(canvas, _cx, _cy);

BitmapCanvas bmpCanvas(canvas, bmp);

RECT rect = { 0, 0, _cx, _cy };

bmpCanvas.WhiteWash(rect);

// Do the off-line drawing

Blitter bltBkg(_background);

bltBkg.BlitTo(bmpCanvas);

int xRange = (_widthBkg - _widthSprite) / 2;

int yRange = (_heightBkg - _heightSprite) / 2;

int x = xRange + static_cast(xRange * sin(speed * _tick));

int y = yRange + static_cast(yRange * cos(4 * speed * _tick));

Blitter bltMask(_mask);

bltMask.SetMode(SRCPAINT);

bltMask.SetDest(x, y);

bltMask.BlitTo(bmpCanvas);

Blitter bltSprite(_sprite);

bltSprite.SetMode(SRCAND);

bltSprite.SetDest(x, y);

bltSprite.BlitTo(bmpCanvas);

// update the buffer

_bitmapBuf = bmp;

}

For completeness, here's the definition of bitmap canvas. You draw directly on this canvas using standard canvas methods, like Line, Text, SetPixel, etc... Here we only blit bitmaps into it.

class BitmapCanvas: public MemCanvas{

public:

BitmapCanvas(HDC hdc, HBITMAP hBitmap) : MemCanvas(hdc) {

// convert bitmap to format compatible with canvas

_hOldBitmap = reinterpret_cast(:: SelectObject(_hdc, hBitmap));

}

~BitmapCanvas() {

:: SelectObject(_hdc, _hOldBitmap);

}

private:

HBITMAP _hOldBitmap;

};

class MemCanvas: public Canvas{

public:

MemCanvas(HDC hdc) : Canvas(:: CreateCompatibleDC(hdc)) {}

~MemCanvas() {

:: DeleteDC(_hdc);

}

};

Now, if you want more speed, read about DirectDraw.

Примечания

1

Имеется превосходная статья Элен Ульман (Ellen Ullman), которае должна быть рекомендована для чтения каждому, кто все еще чувствует позывы к использованию MFC или OWL. Она доступно интерактивно:

Часть 1

Часть 2

или, в печатном виде, в августовском издании журнала Харпера за 1998 год. Предлагаем Вам несколько цитат:

"… В этом мире программирования, написание моего кода перемещалось с акцента на задачу, в сторону становления набором придатков к архитектуре системы, выстроенной Microsoft."

"… Для чего изучать весь сложный код, который волшебники генерируют для меня, если он и так всегда работает?"

"… Искушение никогда не знать, что лежит в основе той легкости, подобно ослабляющей пассивности телевидения. Успокаивающая пустота, когда театр темен. Как приятно ощущать себя потребителем!( подчеркнуто мной. А.Л. )"

Если вы — энтузиаст объектно-ориентированного программирования, то найдете это цитирование официальных Руководящих принципов MFC для написания расширений библиотеки классов довольно забавным.

Ограничьте использование "Private" в Ваших классах. Это необходимо, чтобы пользователи, были способны использовать разработанные Вами MFC-дружественные классы способами, которые Вы могли бы первоначально не предусмотреть. Храня большую часть методов, элементов данных, и общих операторов публично, Вы допускаете гибкость в их использовании. В MFC, даже функции, объявленные в разделе Реализации класса обычно общие (public) или защищенные (protected).

2

Меня задело за живое введение к главе по агрегации в прекрасной (хотя так или иначе тупой) книге "Внутри COM" Дейла Роджерсона ("Inside COM" by Dale Rogerson). Если бы он знал реальную историю, он не был бы столь непреклонен в его защите агрегирования.

Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


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

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




Применение Windows API отзывы


Отзывы читателей о книге Применение Windows API, автор: А. Легалов. Читайте комментарии и мнения людей о произведении.


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

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img