added some development tools
[windows-sources.git] / developer / VC / WTL80 / Samples / WTLExplorer / mainfrm.h
blob89e913efa467bef7bd3e676ff50a2b2745cd0d54
1 // MainFrm.h : interface of the CMainFrame class
2 //
3 /////////////////////////////////////////////////////////////////////////////
5 #ifndef __MAINFRM_H__
6 #define __MAINFRM_H__
8 #pragma once
10 #include <atlframe.h>
11 #include <atlsplit.h>
12 #include <atlmisc.h>
13 #include <atlctrls.h>
14 #include <atlctrlw.h>
15 #include <atlctrlx.h>
17 #include "resource.h"
19 #include "explorercombo.h"
20 #include "shellmgr.h"
23 class CMyPaneContainer : public CPaneContainerImpl<CMyPaneContainer>
25 public:
26 DECLARE_WND_CLASS_EX(_T("WtlExplorer_PaneContainer"), 0, -1)
28 void DrawPaneTitle(CDCHandle dc)
30 RECT rect = { 0 };
31 GetClientRect(&rect);
33 if(IsVertical())
35 rect.right = rect.left + m_cxyHeader;
36 dc.DrawEdge(&rect, EDGE_ETCHED, BF_LEFT | BF_TOP | BF_BOTTOM | BF_ADJUST);
37 dc.FillRect(&rect, COLOR_3DFACE);
39 else
41 rect.bottom = rect.top + m_cxyHeader;
42 // we don't want this edge
43 // dc.DrawEdge(&rect, EDGE_ETCHED, BF_LEFT | BF_TOP | BF_RIGHT | BF_ADJUST);
44 dc.FillRect(&rect, COLOR_3DFACE);
45 // draw title only for horizontal pane container
46 dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
47 dc.SetBkMode(TRANSPARENT);
48 HFONT hFontOld = dc.SelectFont(GetTitleFont());
49 rect.left += m_cxyTextOffset;
50 rect.right -= m_cxyTextOffset;
51 if(m_tb.m_hWnd != NULL)
52 rect.right -= m_cxToolBar;;
53 #ifndef _WIN32_WCE
54 dc.DrawText(m_szTitle, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
55 #else // CE specific
56 dc.DrawText(m_szTitle, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
57 #endif //_WIN32_WCE
58 dc.SelectFont(hFontOld);
64 class CMainFrame : public CFrameWindowImpl<CMainFrame>,
65 public CUpdateUI<CMainFrame>,
66 public CMessageFilter,
67 public CIdleHandler
69 private:
70 struct SortData
72 SortData(int nSortNum, bool bReverse) : nSort(nSortNum), bReverseSort(bReverse)
73 { }
75 int nSort;
76 bool bReverseSort;
79 CCommandBarCtrl m_wndCmdBar;
80 CSplitterWindow m_wndSplitter;
81 /// CPaneContainer m_wndFolderTree;
82 CMyPaneContainer m_wndFolderTree;
83 CTreeViewCtrlEx m_wndTreeView;
84 CListViewCtrl m_wndListView;
85 CExplorerCombo m_wndCombo;
87 CShellMgr m_ShellMgr;
89 int m_nSort;
90 bool m_bReverseSort;
92 bool m_bFirstIdle;
94 // Buffer for OnLVGetDispInfo
95 TCHAR m_szListViewBuffer[MAX_PATH];
96 public:
97 DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
99 CMainFrame() : m_nSort(0), m_bReverseSort(false), m_bFirstIdle(true)
102 virtual BOOL PreTranslateMessage(MSG* pMsg)
104 return CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg);
107 virtual BOOL OnIdle()
109 if(m_bFirstIdle)
111 CComPtr<IShellFolder> spFolder;
112 HRESULT hr = ::SHGetDesktopFolder(&spFolder);
113 if(SUCCEEDED(hr))
115 CWaitCursor wait;
117 m_bFirstIdle = false;
119 FillTreeView(spFolder, NULL, TVI_ROOT);
120 m_wndTreeView.Expand(m_wndTreeView.GetRootItem());
121 m_wndTreeView.SelectItem(m_wndTreeView.GetRootItem());
125 UIUpdateToolBar();
127 return FALSE;
130 HWND CreateAddressBarCtrl(HWND hWndParent);
132 void InitViews();
134 HRESULT FillTreeView(LPSHELLFOLDER lpsf, LPITEMIDLIST lpifq, HTREEITEM hParent);
135 static int CALLBACK CMainFrame::TreeViewCompareProc(LPARAM lparam1, LPARAM lparam2, LPARAM lparamSort);
137 BOOL FillListView(LPTVITEMDATA lptvid, LPSHELLFOLDER pShellFolder);
138 static int CALLBACK ListViewCompareProc(LPARAM lparam1, LPARAM lparam2, LPARAM lparamSort);
140 BEGIN_MSG_MAP(CMainFrame)
141 MESSAGE_HANDLER(WM_CREATE, OnCreate)
142 COMMAND_RANGE_HANDLER(ID_VIEW_ICONS, ID_VIEW_LIST, OnViewChange)
143 COMMAND_RANGE_HANDLER(ID_VIEW_SORT_NAME, ID_VIEW_SORT_ATTR, OnViewSort)
144 COMMAND_ID_HANDLER(ID_COMBO_GO, OnComboGo)
145 COMMAND_ID_HANDLER(ID_VIEW_REFRESH, OnViewRefresh)
147 NOTIFY_CODE_HANDLER(NM_RCLICK, OnNMRClick)
149 NOTIFY_CODE_HANDLER(TVN_SELCHANGED, OnTVSelChanged)
150 NOTIFY_CODE_HANDLER(TVN_ITEMEXPANDING, OnTVItemExpanding)
151 NOTIFY_CODE_HANDLER(TVN_DELETEITEM, OnTVDeleteItem)
153 NOTIFY_CODE_HANDLER(LVN_GETDISPINFO, OnLVGetDispInfo)
154 NOTIFY_CODE_HANDLER(LVN_COLUMNCLICK, OnLVColumnClick)
155 NOTIFY_CODE_HANDLER(LVN_DELETEITEM, OnLVDeleteItem)
156 NOTIFY_CODE_HANDLER(NM_CLICK, OnLVItemClick)
157 NOTIFY_CODE_HANDLER(NM_DBLCLK, OnLVItemClick)
159 COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
160 COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
161 COMMAND_ID_HANDLER(ID_FILE_NEW_WINDOW, OnFileNewWindow)
162 COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
163 COMMAND_ID_HANDLER(ID_VIEW_ADDRESS_BAR, OnViewAddressBar)
164 COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
165 COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
166 CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
167 CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
168 END_MSG_MAP()
170 BEGIN_UPDATE_UI_MAP(CMainFrame)
171 UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
172 UPDATE_ELEMENT(ID_VIEW_ADDRESS_BAR, UPDUI_MENUPOPUP)
173 UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
175 UPDATE_ELEMENT(ID_VIEW_ICONS, UPDUI_MENUPOPUP)
176 UPDATE_ELEMENT(ID_VIEW_SMALL_ICONS, UPDUI_MENUPOPUP)
177 UPDATE_ELEMENT(ID_VIEW_LIST, UPDUI_MENUPOPUP)
178 UPDATE_ELEMENT(ID_VIEW_DETAILS, UPDUI_MENUPOPUP)
180 UPDATE_ELEMENT(ID_VIEW_SORT_NAME, UPDUI_MENUPOPUP)
181 UPDATE_ELEMENT(ID_VIEW_SORT_SIZE, UPDUI_MENUPOPUP)
182 UPDATE_ELEMENT(ID_VIEW_SORT_TYPE, UPDUI_MENUPOPUP)
183 UPDATE_ELEMENT(ID_VIEW_SORT_TIME, UPDUI_MENUPOPUP)
184 UPDATE_ELEMENT(ID_VIEW_SORT_ATTR, UPDUI_MENUPOPUP)
185 END_UPDATE_UI_MAP()
187 LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
188 LRESULT OnViewChange(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
189 LRESULT OnComboGo(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
190 LRESULT OnViewRefresh(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
191 LRESULT OnViewSort(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
192 LRESULT OnNMRClick(int , LPNMHDR pnmh, BOOL& );
193 LRESULT OnTVSelChanged(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/);
194 LRESULT OnTVItemExpanding(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/);
195 LRESULT OnTVDeleteItem(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/);
196 LRESULT OnLVGetDispInfo(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/);
197 LRESULT OnLVColumnClick(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/);
198 LRESULT OnLVDeleteItem(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/);
199 LRESULT OnLVItemClick(int , LPNMHDR pnmh, BOOL& );
200 LRESULT OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
201 LRESULT OnFileNew(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
202 LRESULT OnFileNewWindow(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
203 LRESULT OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
204 LRESULT OnViewAddressBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
205 LRESULT OnViewStatusBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
206 LRESULT OnAppAbout(WORD, WORD, HWND , BOOL& );
209 #endif //__MAINFRM_H__