MainFrm.cpp
上传用户:yideyibiao
上传日期:2015-08-20
资源大小:41k
文件大小:9k
源码类别:

Internet/IE编程

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "SampleBrower.h"
  5. #include "MainFrm.h"
  6. #include "SampleBrowerView.h"
  7. #include <wininet.h>
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CMainFrame
  15. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  16. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  17. //{{AFX_MSG_MAP(CMainFrame)
  18. // NOTE - the ClassWizard will add and remove mapping macros here.
  19. //    DO NOT EDIT what you see in these blocks of generated code !
  20. //添加
  21. ON_CBN_SELENDOK(AFX_IDW_TOOLBAR + 1,OnNewAddress)
  22. ON_COMMAND(IDOK, OnNewAddressEnter)
  23. ON_COMMAND_RANGE(0xe00, 0xfff, OnFavorite)
  24. ON_WM_CREATE()
  25. //}}AFX_MSG_MAP
  26. END_MESSAGE_MAP()
  27. static UINT indicators[] =
  28. {
  29. ID_SEPARATOR,           // status line indicator
  30. ID_INDICATOR_CAPS,
  31. ID_INDICATOR_NUM,
  32. ID_INDICATOR_SCRL,
  33. };
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CMainFrame construction/destruction
  36. CMainFrame::CMainFrame()
  37. {
  38. // TODO: add member initialization code here
  39. }
  40. CMainFrame::~CMainFrame()
  41. {
  42. }
  43. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  44. {
  45. CImageList img;
  46. CString str;
  47. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  48. return -1;
  49. if (!m_wndReBar.Create(this))
  50. {
  51. TRACE0("Failed to create rebarn");
  52. return -1;      // fail to create
  53. }
  54. if (!m_wndToolBar.CreateEx(this))
  55. {
  56. TRACE0("Failed to create toolbarn");
  57. return -1;      // fail to create
  58. }
  59. //设置工具栏属性
  60. m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 150);
  61. m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
  62. img.Create(IDB_BITMAP_HOT, 22, 0, RGB(255, 0, 255));
  63. m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
  64. img.Detach();
  65. img.Create(IDB_BITMAP_COOL, 22, 0, RGB(255, 0, 255));
  66. m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
  67. img.Detach();
  68. m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);
  69. m_wndToolBar.SetButtons(NULL, 6);
  70. //设置每个工具栏按钮
  71. m_wndToolBar.SetButtonInfo(0, ID_GO_BACK, TBSTYLE_BUTTON, 0);
  72. str.LoadString(IDS_GO_BACK);
  73. m_wndToolBar.SetButtonText(0, str);
  74. m_wndToolBar.SetButtonInfo(1, ID_GO_FORWARD, TBSTYLE_BUTTON, 1);
  75. str.LoadString(IDS_GO_FORWARD);
  76. m_wndToolBar.SetButtonText(1, str);
  77. m_wndToolBar.SetButtonInfo(2, ID_GO_STOP, TBSTYLE_BUTTON, 2);
  78. str.LoadString(IDS_GO_STOP);
  79. m_wndToolBar.SetButtonText(2, str);
  80. m_wndToolBar.SetButtonInfo(3, ID_GO_REFRESH, TBSTYLE_BUTTON, 3);
  81. str.LoadString(IDS_REFRESH);
  82. m_wndToolBar.SetButtonText(3, str);
  83. m_wndToolBar.SetButtonInfo(4, ID_START_PAGE, TBSTYLE_BUTTON, 4);
  84. str.LoadString(IDS_STARTPAGE);
  85. m_wndToolBar.SetButtonText(4, str);
  86. m_wndToolBar.SetButtonInfo(5, ID_GO_SERACH, TBSTYLE_BUTTON, 5);
  87. str.LoadString(IDS_SEARCH);
  88. m_wndToolBar.SetButtonText(5, str);
  89. //设置工具栏的尺寸
  90. CRect rectToolBar;
  91. m_wndToolBar.GetItemRect(0, &rectToolBar);
  92. m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(30,20));
  93. // 创建一个组合框作为地址条
  94. if (!m_wndAddress.Create(CBS_DROPDOWN | WS_CHILD, CRect(0, 0, 200, 120), this, AFX_IDW_TOOLBAR + 1))
  95. {
  96. TRACE0("Failed to create comboboxn");
  97. return -1;      // fail to create
  98. }
  99. //添加工具条,地址条到rebar中
  100. m_wndReBar.AddBar(&m_wndToolBar);
  101. str.LoadString(IDS_ADDRESS);
  102. m_wndReBar.AddBar(&m_wndAddress, str, NULL, RBBS_FIXEDBMP | RBBS_BREAK);
  103. // 设定Rebar中的每个尺寸
  104. REBARBANDINFO rbbi;
  105. rbbi.cbSize = sizeof(rbbi);
  106. rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE;
  107. rbbi.cxMinChild = rectToolBar.Width();
  108. rbbi.cyMinChild = rectToolBar.Height();
  109. rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 9;
  110. m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
  111. rbbi.cxMinChild = 0;
  112. CRect rectAddress;
  113. rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE;
  114. m_wndAddress.GetEditCtrl()->GetWindowRect(&rectAddress);
  115. rbbi.cyMinChild = rectAddress.Height() + 10;
  116. rbbi.cxIdeal = 200;
  117. m_wndReBar.GetReBarCtrl().SetBandInfo(2, &rbbi);
  118. m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  119. CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
  120. //建立状态条
  121. if (!m_wndStatusBar.Create(this) ||
  122. !m_wndStatusBar.SetIndicators(indicators,
  123.   sizeof(indicators)/sizeof(UINT)))
  124. {
  125. TRACE0("Failed to create status barn");
  126. return -1;      // fail to create
  127. }
  128.  
  129. //生成“我的收藏夹”子菜单
  130. TCHAR           sz[MAX_PATH];
  131. TCHAR           szPath[MAX_PATH];
  132. HKEY            hKey;
  133. DWORD           dwSize;
  134. CMenu*          pMenu;
  135. // 开始消去存在的菜单
  136. pMenu = GetMenu()->GetSubMenu(4);
  137. while(pMenu->DeleteMenu(0, MF_BYPOSITION));
  138. //从注册表中找到“我的收藏夹的位置”,然后读写注册表
  139. if(RegOpenKey(HKEY_CURRENT_USER, _T("Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"), &hKey) != ERROR_SUCCESS)
  140. {
  141. TRACE0("Favorites folder not foundn");
  142. return 0;
  143. }
  144. dwSize = sizeof(sz);
  145. RegQueryValueEx(hKey, _T("Favorites"), NULL, NULL, (LPBYTE)sz, &dwSize);
  146. ExpandEnvironmentStrings(sz, szPath, MAX_PATH);
  147. RegCloseKey(hKey);
  148.     //添加我的收藏菜单项
  149. BuildFavoritesMenu(szPath, 0, pMenu);
  150. return 0;
  151. }
  152. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  153. {
  154. if( !CFrameWnd::PreCreateWindow(cs) )
  155. return FALSE;
  156. // TODO: Modify the Window class or styles here by modifying
  157. //  the CREATESTRUCT cs
  158. return TRUE;
  159. }
  160. /////////////////////////////////////////////////////////////////////////////
  161. // CMainFrame diagnostics
  162. #ifdef _DEBUG
  163. void CMainFrame::AssertValid() const
  164. {
  165. CFrameWnd::AssertValid();
  166. }
  167. void CMainFrame::Dump(CDumpContext& dc) const
  168. {
  169. CFrameWnd::Dump(dc);
  170. }
  171. #endif //_DEBUG
  172. /////////////////////////////////////////////////////////////////////////////
  173. // CMainFrame message handlers
  174. int CMainFrame::BuildFavoritesMenu(LPCTSTR pszPath, int nStartPos, CMenu *pMenu)
  175. {
  176. CString         strPath(pszPath);
  177. CString         strPath2;
  178. CString         str;
  179. WIN32_FIND_DATA wfd;
  180. HANDLE          h;
  181. int             nPos;
  182. int             nEndPos;
  183. int             nNewEndPos;
  184. int             nLastDir;
  185. TCHAR           buf[INTERNET_MAX_PATH_LENGTH];
  186. CStringArray    astrFavorites;
  187. CStringArray    astrDirs;
  188. CMenu*          pSubMenu;
  189. // 确定有'\'字符
  190. if(strPath[strPath.GetLength() - 1] != _T('\'))
  191. strPath += _T('\');
  192. strPath2 = strPath;
  193. strPath += "*.*";
  194. // 首先扫描 .URL 然后扫描子目录
  195. h = FindFirstFile(strPath, &wfd);
  196. if(h != INVALID_HANDLE_VALUE)
  197. {
  198. nEndPos = nStartPos;
  199. do
  200. {
  201. if((wfd.dwFileAttributes & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM))==0)
  202. {
  203. str = wfd.cFileName;
  204. if(str.Right(4) == _T(".url"))
  205. {
  206. // an .URL file is formatted just like an .INI file, so we can
  207. // use GetPrivateProfileString() to get the information we want
  208. ::GetPrivateProfileString(_T("InternetShortcut"), _T("URL"),
  209.   _T(""), buf, INTERNET_MAX_PATH_LENGTH,
  210.   strPath2 + str);
  211. str = str.Left(str.GetLength() - 4);
  212. // scan through the array and perform an insertion sort
  213. // to make sure the menu ends up in alphabetic order
  214. for(nPos = nStartPos ; nPos < nEndPos ; ++nPos)
  215. {
  216. if(str.CompareNoCase(astrFavorites[nPos]) < 0)
  217. break;
  218. }
  219. astrFavorites.InsertAt(nPos, str);
  220. m_astrFavoriteURLs.InsertAt(nPos, buf);
  221. ++nEndPos;
  222. }
  223. }
  224. } while(FindNextFile(h, &wfd));
  225. FindClose(h);
  226. // Now add these items to the menu
  227. for(nPos = nStartPos ; nPos < nEndPos ; ++nPos)
  228. {
  229. pMenu->AppendMenu(MF_STRING | MF_ENABLED, 0xe00 + nPos, astrFavorites[nPos]);
  230. }
  231. // now that we've got all the .URL files, check the subdirectories for more
  232. nLastDir = 0;
  233. h = FindFirstFile(strPath, &wfd);
  234. ASSERT(h != INVALID_HANDLE_VALUE);
  235. do
  236. {
  237. if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  238. {
  239. // ignore the current and parent directory entries
  240. if(lstrcmp(wfd.cFileName, _T(".")) == 0 || lstrcmp(wfd.cFileName, _T("..")) == 0)
  241. continue;
  242. for(nPos = 0 ; nPos < nLastDir ; ++nPos)
  243. {
  244. if(astrDirs[nPos].CompareNoCase(wfd.cFileName) > 0)
  245. break;
  246. }
  247. pSubMenu = new CMenu;
  248. pSubMenu->CreatePopupMenu();
  249. // call this function recursively.
  250. nNewEndPos = BuildFavoritesMenu(strPath2 + wfd.cFileName, nEndPos, pSubMenu);
  251. if(nNewEndPos != nEndPos)
  252. {
  253. // only intert a submenu if there are in fact .URL files in the subdirectory
  254. nEndPos = nNewEndPos;
  255. pMenu->InsertMenu(nPos, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT)pSubMenu->m_hMenu, wfd.cFileName);
  256. pSubMenu->Detach();
  257. astrDirs.InsertAt(nPos, wfd.cFileName);
  258. ++nLastDir;
  259. }
  260. delete pSubMenu;
  261. }
  262. } while(FindNextFile(h, &wfd));
  263. FindClose(h);
  264. }
  265. return nEndPos;
  266. }
  267. void CMainFrame::OnNewAddress()
  268. {
  269. // 当组合框选中一个时,相应最新的选择
  270. CString str;
  271. m_wndAddress.GetLBText(m_wndAddress.GetCurSel(), str);
  272. ((CSampleBrowerView*)GetActiveView())->Navigate2(str, 0, NULL);
  273. }
  274. void CMainFrame::OnNewAddressEnter()
  275. {
  276. // 当组合框输入一个地址时,相应输入;同时记录下输入的地址添加到组合框链表中
  277. CString str;
  278. m_wndAddress.GetEditCtrl()->GetWindowText(str);
  279. ((CSampleBrowerView*)GetActiveView())->Navigate2(str, 0, NULL);
  280. COMBOBOXEXITEM item;
  281. item.mask = CBEIF_TEXT;
  282. item.iItem = -1;
  283. item.pszText = (LPTSTR)(LPCTSTR)str;
  284. m_wndAddress.InsertItem(&item);
  285. }
  286. void CMainFrame::OnFavorite(UINT nID)
  287. {
  288. ((CSampleBrowerView*)GetActiveView())->Navigate2(m_astrFavoriteURLs[nID-0xe00], 0, NULL);
  289. }