#include #include DynamicDialog::DynamicDialog(void) { mDestroyHandler.setCallback(this,&DynamicDialog::destroyHandler); mInitDialogHandler.setCallback(this,&DynamicDialog::initDialogHandler); mCloseHandler.setCallback(this,&DynamicDialog::closeHandler); mDialogCodeHandler.setCallback(this,&DynamicDialog::dialogCodeHandler); mCommandHandler.setCallback(this,&DynamicDialog::commandHandler); insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); insertHandler(VectorHandler::CloseHandler,&mCloseHandler); insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); insertHandler(VectorHandler::CommandHandler,&mCommandHandler); } DynamicDialog::DynamicDialog(const DynamicDialog &someDynamicDialog) { mDestroyHandler.setCallback(this,&DynamicDialog::destroyHandler); mInitDialogHandler.setCallback(this,&DynamicDialog::initDialogHandler); mCloseHandler.setCallback(this,&DynamicDialog::closeHandler); mDialogCodeHandler.setCallback(this,&DynamicDialog::dialogCodeHandler); mCommandHandler.setCallback(this,&DynamicDialog::commandHandler); insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); insertHandler(VectorHandler::CloseHandler,&mCloseHandler); insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); insertHandler(VectorHandler::CommandHandler,&mCommandHandler); } DynamicDialog::~DynamicDialog() { removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); removeHandler(VectorHandler::CloseHandler,&mCloseHandler); removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); removeHandler(VectorHandler::CommandHandler,&mCommandHandler); } void DynamicDialog::createDialog(HWND hParent,DialogTemplate &someDialogTemplate,DialogType typeDialog) { HINSTANCE hInstance((HINSTANCE)::GetWindowLong(hParent,GWL_HINSTANCE)); if(ModalDialog==typeDialog)::DialogBoxIndirectParam(hInstance,(DLGTEMPLATE*)someDialogTemplate,hParent,DWindow::DlgProc,(LONG)(LPSTR)(DWindow*)this); else if(!isValid())::CreateDialogIndirectParam(hInstance,(DLGTEMPLATE*)someDialogTemplate,hParent,DWindow::DlgProc,(LONG)(LPSTR)(DWindow*)this); } void DynamicDialog::createDialog(DialogTemplate &someDialogTemplate,DialogType typeDialog) { if(ModalDialog==typeDialog)::DialogBoxIndirectParam(processInstance(),(DLGTEMPLATE*)someDialogTemplate,(HWND)0,DWindow::DlgProc,(LONG)(LPSTR)(DWindow*)this); else if(!isValid())::CreateDialogIndirectParam(processInstance(),(DLGTEMPLATE*)someDialogTemplate,(HWND)0,DWindow::DlgProc,(LONG)(LPSTR)(DWindow*)this); } CallbackData::ReturnType DynamicDialog::closeHandler(CallbackData &/*someCallbackData*/) { destroy(); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType DynamicDialog::destroyHandler(CallbackData &someCallbackData) { dlgDestroyDialog(someCallbackData); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType DynamicDialog::initDialogHandler(CallbackData &someCallbackData) { return dlgInitDialog(someCallbackData); } CallbackData::ReturnType DynamicDialog::commandHandler(CallbackData &someCallbackData) { WORD cmdReturn(dlgCommand(someCallbackData.wmCommandID(),someCallbackData)); if(IDCANCEL==someCallbackData.wmCommandID()&&!cmdReturn)endDialog(FALSE); else if(IDOK==someCallbackData.wmCommandID()&&!cmdReturn)endDialog(TRUE); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType DynamicDialog::dialogCodeHandler(CallbackData &someCallbackData) { return dlgCode(someCallbackData); } // *** virtuals WORD DynamicDialog::dlgCommand(DWORD /*commandID*/,CallbackData &/*someCallbackData*/) { return FALSE; } WORD DynamicDialog::dlgCode(CallbackData &/*someCallbackData*/) { return DLGC_WANTTAB; } BOOL DynamicDialog::dlgInitDialog(CallbackData &/*someCallbackData*/) { return TRUE; } void DynamicDialog::dlgDestroyDialog(CallbackData &/*someCallbackData*/) { }