Графика для Windows средствами DirectDraw


Класс CursorWin



Программа Cursor, как и все остальные программы этой книги, построена на базе структурных классов DirectDrawWin и DirectDrawApp. Эти классы остались неизменными, а вся специфика приложения реализуется классом CursorWin. На практике функциональность курсора мыши, вероятно, следовало бы встроить в структурный класс. И все же для наглядности я объединил код для работы с курсором со специфическим кодом приложения. Класс CursorWin приведен в листинге7.1.

Листинг 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().


Начало  Назад  Вперед



Книжный магазин