Вход/Регистрация
Графика для Windows средствами DirectDraw
вернуться

Трухильо Стэн

Шрифт:

Листинг 7.1. Класс CursorWin

class CursorWin : public DirectDrawWin {

public:

 CursorWin;

protected:

 //{{AFX_MSG(CursorWin)

 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

 afx_msg void OnDestroy;

 afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP

private:

 int SelectDriver;

 int SelectInitialDisplayMode;

 BOOL CreateCustomSurfaces;

 void DrawScene;

 void RestoreSurfaces;

private:

 BOOL InitMouse;

 BOOL InitKeyboard;

 BOOL UpdateDelaySurface;

private:

 //------- Функции потока ввода ------

 static DWORD MouseThread(LPVOID);

 BOOL UpdateCursorSimpleCase(int curx, int cury, int oldcurx, int oldcury);

 BOOL UpdateCursorComplexCase(int curx, int cury, int oldcurx, int oldcury);

private:

 //------- Данные мыши -------

 static LPDIRECTINPUTDEVICE mouse;

 static CCriticalSection critsection;

 static CWinThread* mousethread;

 static CEvent* mouse_event[2];

 static int cursor_width;

 static int cursor_height;

 static LPDIRECTDRAWSURFACE cursor;

 static LPDIRECTDRAWSURFACE cursor_under;

 static LPDIRECTDRAWSURFACE cursor_union;

 static int curx, cury;

 static int oldcurx, oldcury;

 static CList<MouseClickData, MouseClickData> mouseclickqueue;

private:

 //------- Данные приложения -------

 LPDIRECTINPUT dinput;

 LPDIRECTINPUTDEVICE keyboard;

 LPDIRECTDRAWSURFACE coil[coil_frames];

 LPDIRECTDRAWSURFACE dm_surf;

 int dm_index;

 DWORD menubarfillcolor;

 HFONT largefont, smallfont;

};

Класс CursorWin объявляет три обработчика сообщений: OnCreate, OnDestroy и OnActivate. Функция OnCreate инициализирует DirectDraw, DirectInput и поток ввода. Функция OnDestroy освобождает интерфейсы DirectX и завершает поток ввода. Функция OnActivate обеспечивает захват мыши и клавиатуры на период активности приложения.

Следующие пять функций наследуются от класса DirectDrawWin:

• SelectDriver

• SelectInitialDisplayMode

• CreateCustomSurfaces

• DrawScene

• RestoreSurfaces

Мы достаточно часто видели эти функции в других приложениях и знаем, что они делают, поэтому не будем рассматривать их. Исключением является функция DrawScene, которая представляет некоторый интерес, потому что помимо создания нового кадра занимается синхронизацией основного потока с потоком ввода.

Затем объявляются функции InitMouse и InitKeyboard. Эти функции используются функцией OnCreate и отвечают за инициализацию объектов DirectInput, предназначенных для работы с мышью и клавиатурой. Функция InitKeyboard совпадает с одноименными функциями программ Qwerty и Smear из главы 6, поэтому она также не рассматривается. Однако функция InitMouse помимо инициализации мыши запускает поток ввода. Вскоре мы рассмотрим эту функцию.

Функция UpdateDelaySurface готовит к выводу поверхность меню задержки. Она выводит текст меню и выделяет текущую задержку.

Далее в классе CursorWin объявляются три функции потока мыши:

• MouseThread

• UpdateCursorSimpleCase

• UpdateCursorComplexCase

Функция MouseThread реализует поток ввода. Когда основной поток создает поток ввода, он передает указатель на статическую функцию MouseThread. Созданный поток использует эту функцию в качестве точки входа и продолжает выполнять ее до возврата из функции или вызова функции AfxEndThread. Функция MouseThread обновляет изображение курсора с помощью функций UpdateCursorSimpleCase и UpdateCursorComplexCase.

  • Читать дальше
  • 1
  • ...
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: