//----------------------------------------------------------------------------------------------------------------- //WTLExplorer : WTLized version of the explorer sample from MSDN. // Use this code at your own risk. We wrote it just for fun :-) // Tested *only* on Win2k. Requires Platform SDK headers. // // //----------------------------------------------------------------------------------------------------------------- #if !defined(AFX_MAINFRM_H__52780AB8_EC19_437E_9D50_1048BE5E0406__INCLUDED_) #define AFX_MAINFRM_H__52780AB8_EC19_437E_9D50_1048BE5E0406__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include "resource.H" #include "ExplorerLeftPane.H" #include "explorercombo.H" //----------------------------------------------------------------------------------------------------------------- class CMainFrame : public CFrameWindowImpl, public CUpdateUI, public CMessageFilter, public CIdleHandler { public: DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME) CMainFrame():m_nSort(0),m_bReverseSort(false),m_wndFolderTree(this) { } virtual BOOL PreTranslateMessage(MSG* pMsg) { return CFrameWindowImpl::PreTranslateMessage(pMsg); } virtual BOOL OnIdle() { UIUpdateToolBar(); return FALSE; } private: typedef struct _LVItemData { _LVItemData():lpi(0),ulAttribs(0){} CComPtr spParentFolder; LPITEMIDLIST lpi; ULONG ulAttribs; } LVITEMDATA, *LPLVITEMDATA; typedef struct _TVItemData { _TVItemData():lpi(0),lpifq(0){} CComPtr spParentFolder; LPITEMIDLIST lpi; LPITEMIDLIST lpifq; } TVITEMDATA, *LPTVITEMDATA; struct SortData { SortData(int nSortNum, bool bReverse) : nSort(nSortNum), bReverseSort(bReverse) {} int nSort; bool bReverseSort; }; public: BEGIN_MSG_MAP(CMainFrame) MESSAGE_HANDLER(WM_CREATE, OnCreate) COMMAND_RANGE_HANDLER(ID_VIEW_ICONS, ID_VIEW_LIST, OnViewChange) COMMAND_RANGE_HANDLER(ID_VIEW_SORT_NAME, ID_VIEW_SORT_ATTR, OnViewSort) COMMAND_ID_HANDLER(ID_VIEW_REFRESH, OnViewRefresh) COMMAND_CODE_HANDLER(CBN_SELENDOK, OnComboChange) NOTIFY_CODE_HANDLER(TVN_SELCHANGED, OnTVSelChanged) NOTIFY_CODE_HANDLER(TVN_ITEMEXPANDING, OnTVItemExpanding) NOTIFY_CODE_HANDLER(TVN_DELETEITEM, OnTVDeleteItem) NOTIFY_CODE_HANDLER(NM_RCLICK, OnContextMenu) NOTIFY_CODE_HANDLER(LVN_GETDISPINFO, OnLVGetDispInfo) NOTIFY_CODE_HANDLER(LVN_COLUMNCLICK, OnLVColumnClick) NOTIFY_CODE_HANDLER(LVN_DELETEITEM, OnLVDeleteItem) NOTIFY_CODE_HANDLER(NM_DBLCLK, OnLVItemClick) NOTIFY_CODE_HANDLER(LVN_KEYDOWN, OnLVItemKeyDown) COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit) COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew) COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar) COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar) COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) CHAIN_MSG_MAP(CUpdateUI) CHAIN_MSG_MAP(CFrameWindowImpl) END_MSG_MAP() BEGIN_UPDATE_UI_MAP(CMainFrame) UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_ICONS, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_SMALL_ICONS, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_LIST, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_DETAILS, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_SORT_NAME, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_SORT_SIZE, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_SORT_TYPE, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_SORT_TIME, UPDUI_MENUPOPUP) UPDATE_ELEMENT(ID_VIEW_SORT_ATTR, UPDUI_MENUPOPUP) END_UPDATE_UI_MAP() LRESULT OnCreate(UINT, WPARAM, LPARAM, BOOL&); LRESULT OnViewChange(WORD, WORD wID, HWND, BOOL&); LRESULT OnComboChange(WORD, WORD, HWND, BOOL& ); LRESULT OnViewRefresh(WORD, WORD, HWND, BOOL& ); LRESULT OnViewSort(WORD, WORD wID, HWND, BOOL& ); LRESULT OnTVSelChanged(int, LPNMHDR pnmh, BOOL& ); LRESULT OnTVItemExpanding(int , LPNMHDR pnmh, BOOL& ); LRESULT OnTVDeleteItem(int , LPNMHDR pnmh, BOOL& ); LRESULT OnContextMenu(int , LPNMHDR pnmh, BOOL& ); LRESULT OnLVGetDispInfo(int, LPNMHDR pnmh, BOOL& ); LRESULT OnLVColumnClick(int , LPNMHDR pnmh, BOOL& ); LRESULT OnLVItemKeyDown(int , LPNMHDR pnmh, BOOL& bHandled); LRESULT OnLVDeleteItem(int , LPNMHDR pnmh, BOOL& ); LRESULT OnLVItemClick(int , LPNMHDR pnmh, BOOL& ); LRESULT OnFileExit(WORD, WORD, HWND, BOOL& ); LRESULT OnFileNew(WORD, WORD , HWND , BOOL& ); LRESULT OnViewToolBar(WORD , WORD , HWND , BOOL& ); LRESULT OnViewStatusBar(WORD , WORD, HWND, BOOL&); LRESULT OnAppAbout(WORD, WORD, HWND , BOOL& ); private: CCommandBarCtrl m_wndCmdBar; CSplitterWindow m_wndSplitter; CFolderBarWindow m_wndFolderTree; CListViewCtrl m_wndListView; CExplorerCombo m_wndCombo; int m_nSort; bool m_bReverseSort; private: void InitTreeView(); void InitListView(); BOOL InitComboBox(); BOOL FillListView(LPTVITEMDATA lptvid, LPSHELLFOLDER lpsf, SHCONTF shFlag); BOOL FillComboBox(LPNMTREEVIEW lpTV, IShellFolder* pShellFolder); BOOL FillComboItem(HTREEITEM hItem, int nIndex, int nIndent); HRESULT FillTreeView(LPSHELLFOLDER lpsf,LPITEMIDLIST lpifq,HTREEITEM hParent); HWND CreateAnotherToolBarCtrl(HWND hWndParent, DWORD dwStyle = ATL_SIMPLE_TOOLBAR_STYLE, UINT nID = ATL_IDW_TOOLBAR); static int CALLBACK ListViewCompareProc(LPARAM lparam1, LPARAM lparam2,LPARAM lparamSort); static int CALLBACK TreeViewCompareProc(LPARAM lparam1,LPARAM lparam2,LPARAM lparamSort); private: int GetIcon(LPITEMIDLIST lpi, UINT uFlags); void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq,LPTV_ITEM lptvitem); static HRESULT GetItemName(LPLVITEMDATA lplvid, UINT nColumnID,LPTSTR psz); LPITEMIDLIST ConcatPidls(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); LPITEMIDLIST InitializeItems(UINT cbSize); LPITEMIDLIST Next(LPCITEMIDLIST pidl); LPITEMIDLIST CopyITEMID(LPMALLOC lpMalloc, LPITEMIDLIST lpi); LPITEMIDLIST GetFullyQualPidl(LPSHELLFOLDER lpsf, LPITEMIDLIST lpi); UINT GetSize(LPCITEMIDLIST pidl); BOOL GetName (LPSHELLFOLDER lpsf, LPITEMIDLIST lpi, DWORD dwFlags, LPSTR lpFriendlyName); BOOL PopContextMenu(HWND hwnd, LPSHELLFOLDER lpsfParent, LPITEMIDLIST lpi, LPPOINT lppt); }; //----------------------------------------------------------------------------------------------------------------- //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MAINFRM_H__52780AB8_EC19_437E_9D50_1048BE5E0406__INCLUDED_)