#include #include #include OpenDirectory::OpenDirectory(void) { } OpenDirectory::~OpenDirectory() { } bool OpenDirectory::getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory) { DiskInfo diskInfo; String strCurrentDirectory; if(strInitialDirectory.isNull())diskInfo.getCurrentDirectory(strCurrentDirectory); else strCurrentDirectory=strInitialDirectory; owner(parentWindow); instance(parentWindow.processInstance()); filter("..;."); filterPattern("..;."); fileName(""); fileTitle(""); initialDirectory(strCurrentDirectory); title(titleString); creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST|OpenDialog::ENABLEHOOK); OpenDialog::hookProc((LPOFNHOOKPROC)getHookAddress()); mLastFolderChange=String(""); if(!getOpenFileName())return false; strDirectory=mLastFolderChange; return true; } OpenDirectory::OpenDirectory(const OpenDirectory &someOpenDirectory) { // private implementation *this=someOpenDirectory; } OpenDirectory &OpenDirectory::operator=(const OpenDirectory &/*someOpenDirectory*/) { // private implementation return *this; } UINT OpenDirectory::hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam) { UINT returnCode(false); switch(uiMsg) { case WM_NOTIFY : { LPOFNOTIFY pNotify=(LPOFNOTIFY)lParam; switch(pNotify->hdr.code) { case CDN_INITDONE : ::EnableWindow(::GetDlgItem(getParent(),FileNameEditControlID),false); returnCode=handleInitDone(); break; case CDN_SELCHANGE : returnCode=handleSelChange(); break; case CDN_FOLDERCHANGE : returnCode=handleFolderChange(); break; case CDN_SHAREVIOLATION : returnCode=handleShareViolation(); break; case CDN_HELP : returnCode=handleHelp(); break; case CDN_FILEOK : returnCode=handleFileOk(); break; case CDN_TYPECHANGE : returnCode=handleTypeChange(); break; } } } return returnCode; } // helpers bool OpenDirectory::getPathFileName(String &strPathFileName) { if(!getHandle())return false; strPathFileName.reserve(MaxString); return ::SendMessage(getParent(),CDM_GETFILEPATH,MaxString,(LPARAM)(LPSTR)strPathFileName); } bool OpenDirectory::getFileName(String &strFileName) { if(!getHandle())return false; strFileName.reserve(MaxString); return ::SendMessage(getParent(),CDM_GETSPEC,MaxString,(LPARAM)(LPSTR)strFileName); } bool OpenDirectory::getFolderPath(String &strFolderPath) { if(!getHandle())return false; strFolderPath.reserve(MaxString); return ::SendMessage(getParent(),CDM_GETFOLDERPATH,MaxString,(LPARAM)(LPSTR)strFolderPath); } bool OpenDirectory::hideControl(UINT controlID) { if(!getHandle())return false; return ::SendMessage(getParent(),CDM_HIDECONTROL,controlID,0); } bool OpenDirectory::setControlText(UINT controlID,const String &strControlText)const { if(!getHandle())return false; return ::SendMessage(getParent(),CDM_SETCONTROLTEXT,controlID,(LPARAM)(LPSTR)(String&)strControlText); } bool OpenDirectory::getControlText(UINT controlID,String &strControlText)const { if(!getHandle())return false; strControlText.reserve(MaxString); return ::SendMessage(getParent(),WM_GETTEXT,MaxString,(LPARAM)(char*)strControlText); } bool OpenDirectory::setDefaultExtension(const String &strDefaultExtension) { if(!getHandle()||strDefaultExtension.isNull())return false; return ::SendMessage(getParent(),CDM_SETDEFEXT,0,(LPARAM)(LPSTR)(String&)strDefaultExtension); } // virtuals UINT OpenDirectory::handleInitDone(void) { return false; } UINT OpenDirectory::handleSelChange(void) { String strFolderPath; getFolderPath(strFolderPath); setControlText(FileNameEditControlID,strFolderPath); return false; } UINT OpenDirectory::handleFolderChange(void) { String strFolderPath; getFolderPath(strFolderPath); if(strFolderPath==mLastFolderChange) { setControlText(FileNameEditControlID,strFolderPath); ::EndDialog(getParent(),TRUE); } else { mLastFolderChange=strFolderPath; setControlText(FileNameEditControlID,strFolderPath); } return false; } UINT OpenDirectory::handleShareViolation(void) { return false; } UINT OpenDirectory::handleFileOk(void) { return false; } UINT OpenDirectory::handleHelp(void) { return false; } UINT OpenDirectory::handleTypeChange(void) { return false; }