#ifndef _DIALOG_DYNAMICDIALOG_HPP_ #define _DIALOG_DYNAMICDIALOG_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_DWINDOW_HPP_ #include #endif #ifndef _COMMON_CALLBACK_HPP_ #include #endif #ifndef _DIALOG_DIALOGITEMTEMPLATE_HPP_ #include #endif #ifndef _DIALOG_DIALOGTEMPLATE_HPP_ #include #endif class DynamicDialog : public DWindow { public: enum DialogType{ModalDialog,ModelessDialog}; DynamicDialog(void); virtual ~DynamicDialog(); void createDialog(HWND hParentWnd,DialogTemplate &someDialogTemplate,DialogType typeDialog=ModalDialog); void createDialog(DialogTemplate &someDialogTemplate,DialogType typeDialog=ModalDialog); protected: virtual WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); virtual void dlgInitDialog(CallbackData &someCallbackData); virtual void dlgDestroyDialog(CallbackData &someCallbackData); private: DynamicDialog(const DynamicDialog &someDynamicDialog); CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); Callback mInitDialogHandler; Callback mCloseHandler; Callback mDestroyHandler; Callback mDialogCodeHandler; Callback mCommandHandler; }; inline DynamicDialog::DynamicDialog(void) : mDestroyHandler(this,&DynamicDialog::destroyHandler), mInitDialogHandler(this,&DynamicDialog::initDialogHandler), mCloseHandler(this,&DynamicDialog::closeHandler), mDialogCodeHandler(this,&DynamicDialog::dialogCodeHandler), mCommandHandler(this,&DynamicDialog::commandHandler) { insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); insertHandler(VectorHandler::CloseHandler,&mCloseHandler); insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); insertHandler(VectorHandler::CommandHandler,&mCommandHandler); } inline DynamicDialog::DynamicDialog(const DynamicDialog &someDynamicDialog) : mDestroyHandler(this,&DynamicDialog::destroyHandler), mInitDialogHandler(this,&DynamicDialog::initDialogHandler), mCloseHandler(this,&DynamicDialog::closeHandler), mDialogCodeHandler(this,&DynamicDialog::dialogCodeHandler), mCommandHandler(this,&DynamicDialog::commandHandler) { insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); insertHandler(VectorHandler::CloseHandler,&mCloseHandler); insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); insertHandler(VectorHandler::CommandHandler,&mCommandHandler); } inline DynamicDialog::~DynamicDialog() { removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); removeHandler(VectorHandler::CloseHandler,&mCloseHandler); removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); removeHandler(VectorHandler::CommandHandler,&mCommandHandler); } #endif