#ifndef _SAMPLE_DEVICEHANDLER_HPP_ #define _SAMPLE_DEVICEHANDLER_HPP_ #ifndef _COMMON_WINDOW_HPP_ #include #endif #ifndef _COMMON_MMSYSTEM_HPP_ #include #endif class DeviceHandler { public: enum PlayMode{Wait,NoWait}; DeviceHandler(Window &windowHandler); DeviceHandler(const DeviceHandler &someDeviceHandler); virtual ~DeviceHandler(); WORD operator==(const DeviceHandler &someDeviceHandler)const; DeviceHandler &operator=(const DeviceHandler &someDeviceHandler); protected: enum ErrorCode{InvalidFormat,InvalidDeviceHandle,InvalidHeader}; virtual void openHandler(CallbackData &someCallbackData); virtual void closeHandler(CallbackData &someCallbackData); virtual void doneHandler(CallbackData &someCallbackData); virtual void message(const String &strErrorMessage)const; void mmSystemErrorMessage(MMRESULT mmResult)const; void genericErrorMessage(ErrorCode errorCode)const; private: void insertHandlers(void); void removeHandlers(void); CallbackData::ReturnType mmOpenHandler(CallbackData &someCallbackData); CallbackData::ReturnType mmCloseHandler(CallbackData &someCallbackData); CallbackData::ReturnType mmDoneHandler(CallbackData &someCallbackData); Callback mMMOpenHandler; Callback mMMCloseHandler; Callback mMMDoneHandler; Window &mWindowHandler; }; inline DeviceHandler::DeviceHandler(Window &windowHandler) : mWindowHandler(windowHandler) { mMMOpenHandler.setCallback(this,&DeviceHandler::mmOpenHandler); mMMCloseHandler.setCallback(this,&DeviceHandler::mmCloseHandler); mMMDoneHandler.setCallback(this,&DeviceHandler::mmDoneHandler); insertHandlers(); } inline DeviceHandler::DeviceHandler(const DeviceHandler &someDeviceHandler) : mWindowHandler(someDeviceHandler.mWindowHandler) { mMMOpenHandler.setCallback(this,&DeviceHandler::mmOpenHandler); mMMCloseHandler.setCallback(this,&DeviceHandler::mmCloseHandler); mMMDoneHandler.setCallback(this,&DeviceHandler::mmDoneHandler); insertHandlers(); } inline DeviceHandler::~DeviceHandler() { removeHandlers(); } inline DeviceHandler &DeviceHandler::operator=(const DeviceHandler &/*someDeviceHandler*/) { return *this; } #endif