#ifndef ZZG_CXMLTREEFILEDLGHELPER_2009_01_05 #define ZZG_CXMLTREEFILEDLGHELPER_2009_01_05 #pragma once #include "XMLTreeSubclassWnd.h" class CXMLTreeFileDlgHelper; ////////////////// // Used to subclass the file dialog // class CFileDialogHook : public CXMLTreeSubclassWnd { protected: CXMLTreeFileDlgHelper* m_pHelper; // ptr to helper class virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp); friend CXMLTreeFileDlgHelper; }; ////////////////// // Used to subclass the file dialog's parent/owner // class CFileDialogOwnerHook : public CXMLTreeSubclassWnd { protected: CXMLTreeFileDlgHelper* m_pHelper; // ptr to helper class CFileDialog* m_pDlg; // ptr your CFileDialog dialog derivate HWND m_hwndParent; // HWND of real open file dialog virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp); void Init(CWnd* pOwner, CFileDialog* pDlg); friend CXMLTreeFileDlgHelper; }; ////////////////// // Class to help parsing file open dialog stuff // class CXMLTreeFileDlgHelper { protected: CFileDialogHook m_dlghook; // subclass dialog CFileDialogOwnerHook m_ownerhook; // subclass dialog's owner CFileDialog* m_pDlg; // your CFileDialog BOOL m_bUpdateUI; // do idle UI update? public: CXMLTreeFileDlgHelper(); ~CXMLTreeFileDlgHelper(); // You must call this from your dialog's OnInitDialog void Init(CFileDialog* pDlg); // usefull fns for you to call CListCtrl* GetListCtrl(); // get list control CString GetItemName(int i); // get filename w/o path BOOL IsItemFolder(int i); // is this item a folder? friend CFileDialogHook; friend CFileDialogOwnerHook; }; #endif