«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!

             ——既瑜


天气预报(南京)


我的分类(专题)

首页(183)
【趣味文摘】(22)
【五子连珠】(13)
【技术文档】(136)
【电脑技术】(6)
【疑难问题】(1)
【我的心情】(5)


最新日志
花语(中英文对照版)
各种花的花语
NTFS格式的7个精彩问答(pconli
童言无忌,有趣得一蹋
给MM修电脑的三个步骤[转载]
J2EE 面试题综合
JAVA编程规则
[转] P2P之UDP穿透NAT的原理与
[转]词法分析器
文件加密技术
一个让人发狂的PI求解C程序
[转]直线生成算法之DDA
[转]利用内核对象----互斥量实现应用
[转]如何正确的计算文件收发进度
双机调试VC程序
[转]分治法优化大整数乘法 C++实现
浮点数值的内存结构
[转]双链表实现大整数的加法与乘法[VC
拜占廷将军问题[转]
某人的挂QQ的程序源代码,虽然没用了,拿

最新回复
回复:vc中的CString的操作
回复:[转]分治法优化大整数乘法 C++
回复:[转]分治法优化大整数乘法 C++
回复:花语(中英文对照版)
回复:基本排序算法比较与选择[转载]
回复:c++中强制类型转换操作符小结
回复:c++中强制类型转换操作符小结
何必那么执着于是大头猫还是愤怒的小鸟,淡
回复:浮点数值的内存结构
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:32位位图到24位位图的转换
dren, ages 16 and 20
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:各种花的花语

留言板
签写新留言

不是0-1背包喔
桂花的花语``
谢谢
提议
提议

统计
blog名称:★既瑜★
日志总数:183
评论数量:636
留言数量:-25
访问次数:1405858
建立时间:2005年3月12日

链接


http://www.nju.edu.cn
http://bbs.nju.edu.cn 
http://www.t7-online.com
http://www.csdn.net
http://www.91f.net
http://www.crsky.com
我的MSN BLOG 

联系我

  OICQ:215768265
  njucs2001@hotmail.com
  erichoo1982@gmail.com

 

W3CHINA Blog首页    管理页面    写新日志    退出


[【技术文档】]用Visual C++打造IE浏览器(3)
既瑜(224499) 发表于 2005/3/19 11:01:18

  二、实现收藏菜单   一般IE的用户都有个习惯,那就是将自己喜欢的网址保存起来,以方便今后快速的登陆,为了使我们的浏览器能够显示IE收藏过的网址,程序中设置了一个"Favorites"菜单,通过RegOpenKey()、RegQueryValueEx()等函数操作Windows的注册表中的HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders项,将收藏的网址显示到菜单上。为此,笔者定义了两个函数,实现代码如下所示: TCHAR GetDir( ) //得到存放用户收藏网址的目录;{TCHAR sz[MAX_PATH];TCHAR szPath[MAX_PATH];HKEY hKey;DWORD dwSize;CMenu* pMenu;// 得到"Favorites"菜单,并删除空白的子菜单项;pMenu = GetMenu()->GetSubMenu(3);while(pMenu->DeleteMenu(0, MF_BYPOSITION));// find out from the registry where the favorites are located.if(RegOpenKey(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders"), &hKey) != ERROR_SUCCESS){TRACE0("Favorites folder not found\n");return 0;}dwSize = sizeof(sz);RegQueryValueEx(hKey, _T("Favorites"), NULL, NULL, (LPBYTE)sz, &dwSize);ExpandEnvironmentStrings(sz, szPath, MAX_PATH);RegCloseKey(hKey);Return szPath}int CMainFrame::BuildFavoritesMenu(LPCTSTR pszPath, int nStartPos, CMenu* pMenu){CString strPath(pszPath);CString strPath2;CString str;WIN32_FIND_DATA wfd;HANDLE h;int nPos;int nEndPos;int nNewEndPos;int nLastDir;TCHAR buf[INTERNET_MAX_PATH_LENGTH];CStringArray astrFavorites;CStringArray astrDirs;CMenu* pSubMenu;if(strPath[strPath.GetLength() - 1] != _T('\\'))strPath += _T('\\');strPath2 = strPath;strPath += "*.*";// 扫描当前目录,首先搜索*.URL文件,然后是可能含有*.URL文件的子目录;h = FindFirstFile(strPath, &wfd);if(h != INVALID_HANDLE_VALUE){nEndPos = nStartPos;do{if((wfd.dwFileAttributes& (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM))==0){str = wfd.cFileName;if(str.Right(4) == _T(".url")){/*URL文件和INI文件格式类似,所以我们可以使用 GetPrivateProfileString() 来得到我们所需要的信息。*/::GetPrivateProfileString(_T("InternetShortcut"), T("URL"),_T(""),buf,INTERNET_MAX_PATH_LENGTH,strPath2 + str);str = str.Left(str.GetLength() - 4); // 判断是否已经重复;for(nPos = nStartPos ; nPos < nEndPos ; ++nPos){if(str.CompareNoCase(astrFavorites[nPos]) < 0)break;}astrFavorites.InsertAt(nPos, str);//添加该字符串;m_astrFavoriteURLs.InsertAt(nPos, buf);//保留相应的地址++nEndPos;}}} while(FindNextFile(h, &wfd));FindClose(h);// 将找到的项目添加到菜单中;for(nPos = nStartPos ; nPos < nEndPos ; ++nPos){pMenu->AppendMenu(MF_STRING | MF_ENABLED, 0xe00 + nPos, astrFavorites[nPos]);}// 搜索子目录nLastDir = 0;h = FindFirstFile(strPath, &wfd);ASSERT(h != INVALID_HANDLE_VALUE);do{if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ //对目录进行搜索;if(lstrcmp(wfd.cFileName,_T(".")) == 0 || lstrcmp(wfd.cFileName, _T("..")) == 0)continue;for(nPos = 0 ; nPos < nLastDir ; ++nPos){if(astrDirs[nPos].CompareNoCase(wfd.cFileName) > 0)break;}pSubMenu = new CMenu;pSubMenu->CreatePopupMenu(); // call this function recursively.nNewEndPos = BuildFavoritesMenu(strPath2 + wfd.cFileName, nEndPos, pSubMenu);if(nNewEndPos != nEndPos){// 插入子菜单;nEndPos = nNewEndPos;pMenu->InsertMenu(nPos, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT)pSubMenu->m_hMenu, wfd.cFileName);pSubMenu->Detach();astrDirs.InsertAt(nPos, wfd.cFileName);++nLastDir;}delete pSubMenu;}} while(FindNextFile(h, &wfd));FindClose(h);}return nEndPos;}   三、显示超文本   微软ChtmView类的Navigate2函数可以实现超文本文件的显示,GoBack()、GoForward()等函数可以分别实现网页浏览的回退和前进操作。以响应"Favorite"菜单项为例,需要在程序的CmainFrame类中添加消息映射ON_COMMAND_RANGE(0xe00, 0xfff, OnFavorite)和消息响应函数OnFavorite,来响应ID为0xe00-0xfff范围内的菜单单击处理,具体实现代码如下: void CMainFrame::OnFavorite(UINT nID){((CMYIEView*)GetActiveView())->Navigate2(m_astrFavoriteURLs[nID-0xe00], 0, NULL);}   四、小结   上面的代码相对较多,对某些函数的使用不清楚的话,请参考MSDN,它包含了高级界面处理、注册表的操作等内容,也许刚开始看起来可能感到有些困难,但是如果读者朋友细细品味的话,一定可以学到一些东西,对今后程序的界面开发有所帮助。

阅读全文(3043) | 回复(0) | 编辑 | 精华


发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144754957 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号