ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:25.68KB ,
资源ID:10950420      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10950420.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用Visual C++设计自己的资源浏览器.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用Visual C++设计自己的资源浏览器.docx

1、利用Visual C+设计自己的资源浏览器利用Visual C+设计自己的资源浏览器Windows的资源管理器想必大家都用过,该程序的窗口一分为二,左边的窗口显示本机当前所有驱动器以及驱动器中的所有文件夹,当用户单击文件夹后,如果该文件夹下面还有子文件夹,则上层文件夹展开显示下级的文件夹;否则,右边的窗口显示选择文件夹下的文件。那么这个程序是如何实现的呢?为了说明这个问题,本实例打造了一个简易的资源管理器,它实现了Windows资源管理器的主要功能,在显示文件的属性(如文件的文件名、文件的大小、文件的创建时间)的同时,还可以改变文件显示的方式,如大小图标方式、列表方式等。对于Visual C+

2、初学者来说,这个实例和实例2:打造自己的IE浏览器要结合起来细细的学习、消化,这两个实例包含了Visual C+编程中的很多细节知识,如工具栏的处理、树型控件/列表控件的使用、窗口的拆分、字符串的处理等,相信读者朋友可以从中学到很多知识点。 一、 实现方法从上面的界面效果图可以看出,在程序中使用了拆分窗口,在拆分的过程中,左边窗口为CTreeView 类的子类CLeftView,右边的窗口为CListView类的子类CdriveExplorerView。窗口的拆分和CTreeView、CListView类不是本实例讲述的重点,相关的知识在本书的实例中都有介绍,读者朋友可以参阅上述内容及实例的原

3、代码,这里主要介绍程序中一些具体的细节知识。 资源管理器中一个重要的问题是如何得到本机中的驱动器信息,微软提供的有关驱动器的API函数有GetLogicalDrives(),GetDriveType()。对于喜欢操作位和字节的汇编语言使用者来说,GetLogicalDrives()是个很好用的API函数。它以位掩码的形式返回逻辑驱动器。即在一个DWORD类型的返回值中,位0(最小的一位)表示驱动器A,位1表示驱动器B,以此类推。每一个位的状态如果是on,则表示对应的逻辑驱动器存在;否则状态为off,表示对应的逻辑驱动器不存在。大家知道DWORD是一个32位的值,足以包括所有的英文字母,也就是说

4、最多可有26个盘符。 为了确定某个逻辑驱动器的类型,必须调用GetDriveType()函数。它以路径名作为参数(如C:),返回DRIVE_FIXED,DRIVE_REMOVABLE,或DRIVE_UNKNOWN。下面列出了所有可能返回的值:这些值在winbase.h定义#define DRIVE_UNKNOWN 0 / 无效路径名 #define DRIVE_NO_ROOT_DIR 1 / 无效路经,如无法找到的卷标 #define DRIVE_REMOVABLE 2 / 可移动驱动器(如磁盘驱动器,光驱等) #define DRIVE_FIXED 3 / 固定的驱动器 (如 通常的硬盘)

5、#define DRIVE_REMOTE 4 / 网络驱动器 #define DRIVE_CDROM 5 / CD-ROM #define DRIVE_RAMDISK 6 / 随机存取(RAM) 磁盘 有了驱动器的信息,就可以使用FindFirstFile()、FindNextFile()等函数来获取驱动器下面的文件或文件夹信息(相关内容参加实例:修改文件或文件夹的属性),然后分别添加到树型视图和列表视图中。最后要说明的一点是需要根据不同的状态和文件类型在视图中显示不同的图表,这些可以通过设置列表视图的窗口风格、树状视图的项目条的图标来实现,具体参见代码部分。二、编程步骤1、 启动Visual

6、 C+6.0,生成一个单文档视图的应用程序,视图类的基类选择CListView,项目命名为DriveExplorer,同时在项目中添加图标资源、菜单和菜单响应函数(详细内容参见原代码);2、 使用Class Wizard为项目添加新类CLeftView类,其基类选择CtreeView;3、 添加代码,编译运行程序。三、程序代码/ LeftView.h : interface of the CLeftView class#if !defined(AFX_LEFTVIEW_H_29F66875_4E46_11D6_9693_B383368EF622_INCLUDED_)#define AFX_LE

7、FTVIEW_H_29F66875_4E46_11D6_9693_B383368EF622_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000 class CDriveExplorerDoc;class CLeftView : public CTreeViewprotected: / create from serialization onlyCLeftView();DECLARE_DYNCREATE(CLeftView)/ Attributespublic:CDriveExplorerDoc* GetDocument();

8、CImageList* m_pImageList;CString m_LocalPath;/ Operationspublic:BOOL HasSubdirectory(CString &strPathName);BOOL IsDriveNode(HTREEITEM hItem);void SetButtonState(HTREEITEM hItem, CString &strPathName);UINT AddDirectoryNodes(HTREEITEM hItem, CString &strPathName);BOOL IsMediaValid(CString &strPathName

9、);HTREEITEM GetDriveNode(HTREEITEM hItem);UINT DeleteChildren(HTREEITEM hItem);BOOL IsPathValid(CString &strPathName);CString GetPathFromItem(HTREEITEM hItem);void AddDummyNode(HTREEITEM hItem);void InitTreeView(HTREEITEM hParent);BOOL AddDrives(CString strDrive, HTREEITEM hParent);/ Overrides/ Clas

10、sWizard generated virtual function overrides/AFX_VIRTUAL(CLeftView)public:virtual void OnDraw(CDC* pDC); / overridden to draw this viewvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

11、virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnInitialUpdate(); / called first time after construct/AFX_VIRTUAL/ Implementationpublic:virtual CLeftView();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:/ Generated messag

12、e map functionsprotected:/AFX_MSG(CLeftView)/ NOTE - the ClassWizard will add and remove member functions here./ DO NOT EDIT what you see in these blocks of generated code !afx_msg void OnDestroy();afx_msg void OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnSelchanging(NMHDR* pNMHDR

13、, LRESULT* pResult);/AFX_MSGDECLARE_MESSAGE_MAP();#ifndef _DEBUG / debug version in LeftView.cppinline CDriveExplorerDoc* CLeftView:GetDocument() return (CDriveExplorerDoc*)m_pDocument; #endif#endif/ CLeftView#include stdafx.h#include DriveExplorer.h#include DriveExplorerDoc.h#include LeftView.h#inc

14、lude DriveExplorerView.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif#define ILI_CDDRV 0#define ILI_CLSDFLD 1#define ILI_DRIVE 2 #define ILI_FLOPPYDRV 3 #define ILI_MYCOMP 4#define ILI_OPENFLD 5 #define ILI_TEXTFILE 6 #define MYCOMPUTER My ComputerIMPLEMENT_

15、DYNCREATE(CLeftView, CTreeView)BEGIN_MESSAGE_MAP(CLeftView, CTreeView)/AFX_MSG_MAP(CLeftView)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!ON_WM_DESTROY()ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding)ON_NOTIFY_REF

16、LECT(TVN_SELCHANGING, OnSelchanging)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CTreeView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView:OnFilePrintPreview)END_MESSAGE_MAP()/ CLeftView construction/destructionCLeft

17、View:CLeftView()/ TODO: add construction code hereCLeftView:CLeftView()BOOL CLeftView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying the CREATESTRUCT cscs.style |= TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES;return CTreeView:PreCreateWindow(cs);void

18、CLeftView:OnDraw(CDC* pDC)CDriveExplorerDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereBOOL CLeftView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CLeftView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/

19、TODO: add extra initialization before printingvoid CLeftView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printingvoid CLeftView:OnInitialUpdate()CTreeView:OnInitialUpdate();m_pImageList = new CImageList();CWinApp* pApp = AfxGetApp();/ ASSERT(m_pImageList != NULL); / s

20、erious allocation failure checkingm_pImageList-Create(16, 16, ILC_COLOR8 | ILC_MASK, 9, 9);m_pImageList-Add(pApp-LoadIcon(ICO_CDDRV);m_pImageList-Add(pApp-LoadIcon(ICO_CLSDFLD);m_pImageList-Add(pApp-LoadIcon(ICO_DRIVE);m_pImageList-Add(pApp-LoadIcon(ICO_FLOPPYDRV);m_pImageList-Add(pApp-LoadIcon(ICO_

21、MYCOMP);m_pImageList-Add(pApp-LoadIcon(ICO_OPENFLD);m_pImageList-Add(pApp-LoadIcon(ICO_TEXTFILE);GetTreeCtrl().SetImageList(m_pImageList , TVSIL_NORMAL);HTREEITEM hParent = GetTreeCtrl().InsertItem(MYCOMPUTER, ILI_MYCOMP, ILI_MYCOMP);InitTreeView(hParent);GetTreeCtrl().Expand(hParent, TVE_EXPAND); #

22、ifdef _DEBUGvoid CLeftView:AssertValid() constCTreeView:AssertValid();void CLeftView:Dump(CDumpContext& dc) constCTreeView:Dump(dc);CDriveExplorerDoc* CLeftView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CDriveExplorerDoc);return (CDriveExplorerDoc*)m_pDocum

23、ent;#endif /_DEBUGvoid CLeftView:InitTreeView(HTREEITEM hParent)int nPos = 0;UINT nCount = 0;CString strDrive = ?:;DWORD dwDriveList = :GetLogicalDrives ();CString cTmp;while (dwDriveList) if (dwDriveList & 1) cTmp = strDrive;strDrive.SetAt (0, 0x41 + nPos);if (AddDrives(strDrive , hParent)nCount+;d

24、wDriveList = 1;nPos+;return;BOOL CLeftView:AddDrives(CString strDrive, HTREEITEM hParent)HTREEITEM hItem;UINT nType = :GetDriveType (LPCTSTR) strDrive);UINT nDrive = (UINT) strDrive0 - 0x41;switch (nType) case DRIVE_REMOVABLE:hItem = GetTreeCtrl().InsertItem(strDrive, ILI_FLOPPYDRV, ILI_FLOPPYDRV, h

25、Parent);AddDummyNode(hItem);break;case DRIVE_FIXED:hItem = GetTreeCtrl().InsertItem(strDrive, ILI_DRIVE, ILI_DRIVE, hParent);AddDummyNode(hItem);break;case DRIVE_REMOTE:hItem = GetTreeCtrl().InsertItem(strDrive, ILI_DRIVE, ILI_DRIVE, hParent);AddDummyNode(hItem);break;case DRIVE_CDROM:hItem = GetTre

26、eCtrl().InsertItem(strDrive, ILI_CDDRV, ILI_CDDRV, hParent);AddDummyNode(hItem);break;case DRIVE_RAMDISK:hItem = GetTreeCtrl().InsertItem(strDrive, ILI_CDDRV, ILI_CDDRV, hParent);AddDummyNode(hItem);break;default:return FALSE;return true;void CLeftView:OnDestroy() CTreeView:OnDestroy();/ TODO: Add y

27、our message handler code hereif(m_pImageList != NULL)m_pImageList = NULL;delete m_pImageList;void CLeftView:AddDummyNode(HTREEITEM hItem)GetTreeCtrl().InsertItem (, 0, 0, hItem);CString CLeftView:GetPathFromItem(HTREEITEM hItem)CString strPathName;while (hItem != NULL) CString string = GetTreeCtrl()

28、.GetItemText (hItem);if (string.Right (1) != ) & !strPathName.IsEmpty ()string += ;strPathName = string + strPathName;hItem = GetTreeCtrl().GetParentItem (hItem);if(strPathName.Left(11) = MYCOMPUTER & strPathName.GetLength() 11)strPathName = strPathName.Mid(12);return strPathName;BOOL CLeftView:IsPa

29、thValid(CString &strPathName)if (strPathName.GetLength () = 3)return TRUE;HANDLE hFind;WIN32_FIND_DATA fd;BOOL bResult = FALSE;if (hFind = :FindFirstFile (LPCTSTR) strPathName, &fd) !=INVALID_HANDLE_VALUE) if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)bResult = TRUE;:CloseHandle (hFind);return bResult;BOOL CLeftView:IsMediaValid(CString &strPathNam

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1