C++资源管理器(制作步骤详细)

所需积分/C币:13 2012-12-28 21:48:15 1.35MB PDF
收藏 收藏 3
举报

MFC资源管理器,制作步骤相当详细,很适合初学者,而且制作后效果也很美观!!!
点击 Finish按钮,创建框架 C器在me CMy Explore nApp yExplaret Bage elass Impkcmcnlatea file: c Back Ned >Finish Caner 图11-6 MFC App wizard-Step4对话框 添加控件资源 利用 Visaul o++的资源编辑器为工程的主对话框 IDD MYEXPLORER DIALOG添 加控件资源。根据该资源管理器的功能需求,分别为对话添加静态文本框Ⅰ C STATIC, 编辑框 IDC URL,按钮控件 IDC REDIRECT,树形控件 IDC TREE,列表框控件 IDC LIST。添加控件后的对话框资源如图11-7所示。 eXplorer -.83 Expanded Node 黑 Expande d Node +2 Coll 图11-7添加完控件后的对话框资源 控件ID,控件类型和控件用途的对应关系如表11-1所示。 表 主对话框资源清单 控件 控件类型 控件用途 IDC STATIC 静态文本框 显示提示信息 IDC URL 编辑框 输入全路径 IDC REDIRECT 按钮控件 执行“转到”操作 IDC TREE 树形控件 显示文件夹层次列表 IDC LIST 列表控件 显示文件列表 Visual c++简明教程 再利用 MFC Class wizard将控件与主对话框类的成员变量关联起来。在 Class wizard 对话框上的 Member variable选项卡进行关联操作,如图11-8所示。 Message Maps Member Variables Automation ActiveX<Events I c Add class.: MYExplurer l CMyExplorerDls D:-TMyExplorerDlgh D\yMyExploterDig cpp Add Variable.. TREE Chirlreettrl m wndfree IOC URL Hinn All OK Cancel 图11-8为对话框控件添加关联变量 添加菜单资源 利用 Visual c++为工程添加菜单资源 IDR MENU MAINFRAME,并对其进行编缉。 编辑后的菜单资源如图11-9所示。 文件〕编〖〕查看)帮助⑩ 拷贝c 前切 粘贴① 0T己rte w Resource ID:DR MENU MAINFRAME Preview: FO TE m- Language: Chinese(P.RC-] 关图 Condition 图11-9菜单资源 IDR MENU MAINFRAME 菜单 IDR MENU MAINFRAME的菜单项ID,菜单项名称,菜单项用途对应关系 如表11-2所示。 表 菜单 清单 菜单 菜单名称 用途 IDM FILE OPEN 打开 打开目录 IDM FILE CLOSE 关闭 关闭目录 IDM EDIT COPY 拷贝 拷贝选取的文件 IDM EDIT CUT 剪切 剪切选取的文件 IDM EDIT PASTE 粘贴 粘贴选取的文件 IDM EDIT DELETE 删除 删除选取的文件 IDM VIEW FOLDER 文件夹 打开树视图 IDM ABOUT 关于 查看相关信息 实现系统图标列表类 为工程添加新类 CSystemImageList,用于完成与文件图标信息相关的操作。该类提 供了获取 Windows操作系统所有的文件图标的功能,并且提供了获取指定文件的图标句 柄的功能。 选择主菜单上的 Insert命令,将弹出 Insert子菜单;弹出的子菜单上,选择 New Class 命令,将弹出 New class对话框。在 New Class对话框的 Class Type下拉列表框中选择 Generic Class,在编辑框Name中输入 CSystemImageList,编辑框 Derived from中输入 CObject,派生类型下拉列表框选则 Public。单击OK按钮,向工程添加系统图标列表 CSystemImageList类。如图11-10所示 Claes information Cancel e SyelemlmME LIsECpP 图11-10添加 CSystemImagelist类 在 CSystemImageList类中添加两个图像列表类的静态指针变量,分别用于存储操作 系统的大图标链表和小图标链表;添加一个整数型静态变量,用于统计 CSystemImageList 类被使用的次数;并且添加相关功能的成员函数。 CSystemImageList类的声明如下 CSystemlmagelist类的声明 class CSystemImageList: public Cobject private static CImageList* m gplargelmagelist;∥大图标链表 static CImageList* m gpSmalllmagelist;∥小图标链表 static int m gRefCount;/)计数器 private ∥始化静态列表 BOOL InitGlobalList( CimageList"& rpImageList, booL bSmall-TRUE ∥销毁静态链表 Visual c++简明教程 void Destroy GlobalList( CImageList*& rpImageList public CSystemImageListo ∥/构造函数 virtual~ CSystemImageList(;∥析构函数 ∥得到图标链表 CImageList* Getimage List( bool sMall= TRUE )const; ∥得到指定文件的图标 HICON GetIcon( const CString& sName, booL bOpen-- FALSE, bool bSmall- TRUE ); }; 初始化图标链表 初始化图标链表的工作是在构造函数中完成的。在 CSystemImageList类的构造函数 CSystemImageList中,对 m gRefCount的值进行判断。 如果 m gRefCount的值等于0,说明链表还未初始化,那么通过调用成员函数 Initgloballist完成进行初始化链表的工作。 如果 m gRefCount的值不等于0,说明链表已经初始化,那么将计数器 m gRefCount 加1 其实现代码如下 构造函数 CSystemImageList: CSystemlmageListo if( m gRefCount==0)∥如是计数器为0,说明还未初始化 ASSERT(! m gpSmallImageList && m gpLargelmageList Initgloballiste( m gpSmalllmagelist,TRUE);∥初始化小图标链表 Initgloballist( m gpLargelmagelist, FALSE);∥初始化大图标链表 m gRefCount++;/计数器加1 为 CSystemImageList类添加成员函数 Initgloballist,在其中完成对链表初始化的功 能。在函数 Initgloballist中,获取操作系统的图标链表,并将其保存到参数 rpImagelist 中。其实现代码如下: ∥始化链表 BOOL CSystemImageList: InitGlobalList( CImageList*& rplmageList, booL bSmall bool bRet= FALSE if(! rpImageList)∥如果链表为空 { pImagelist= new CImageList;∥分配内存 if( rplmagelist)/如果分配内存成功 SHFILEINFO Sfi dWORd dw Flags= SHGFI USEFILEATTRIBUTESSHGFI SYSICONINDEX if( sMall)∥/指定图标的大小 dw Flags SHGFI SMALLICON size t size= sizeof( shfileinfo ); 获取操作系统图标链表 dord dw= SHGetFileInfo( NULL, FILE ATTRIBUTE NORMAL &sfi, size, dw Flags ) rplmagelist-> Attach(( HIMAGELIST)dw);∥保存链表 rplmagelist-> Setbk color( CLR NONE);∥设置背景模式 bRet= TRUE return( bRet ) 销毁图标链表 为 CSystemImageList类添加私有成员函数 Destroy GlobalIst,在其中完成销毁图标 链表的操作。在函数 Destroy Globalist中,对指针 rpImageList进行判断,如果该指针 不为空,则将图标链表对象与图标链表对象的句柄分离,并销毁图标链表。如果在销毁 图标链表销毁前没有将图标链表对象与图标链表对象的句柄分离,那么系统的图标链表 也会被破坏,就会导致系统异常。 其实现代码如下: 销毁图标链表 void CSystemImageList: Destroy GlobalList( CImageList*& rplmageList if( rplmageList)∥判断图像链表指针是否为空 rplmagelist> Detach;∥将图标链表对象与图标链表对象的句柄分离 delete rplmageList ∥销毁图标链表 pImageList= NULL Visual c++简明教程 CSystemImageList类的析构函数在其对象销毁时将会被自动调用,在析构函数中, 对计数器 m gRefCount进行减1操作,并判断其是否为0。如果 m gRefCount的值为0, 说明所有 CSystemImageList类的对象均已被全部销毁,那么就调用 CSystemImageList 类的成员函数 Destroy GlobalIst,完成对链表的销毁操作 其实现代码如下 /析构函数 CSystemlmageList: CSystemlmageListO m gRefCount-;/将计数器减1 f( m rEcoUnt==0)∥如果 CSystemlmageList类的对象已经全部被销毁 Destroy GlobalIst( m gpLargelmageList);∥销毁大图标链表 Destroy Globalist( m gpSmalllmageList);∥销毁小图标链表 获取图标 CSystemImageList类提供了两种方式向外部提供图标获取的功能,一种是根据参数 直接返图像大图标链表指针或小图标指针,另一种是根据参数,返回指定文件的图标句 为 CSystemImagelist类添加成员函数 GetlmageList,在其中完成根据参数直接返图 像大图标链表指针或小图标链表指针的功能。在函数 GetlmageList中,对其入口参数 sMall进行判断,如果 sMall的值为TRUE,那么返回小图标链表指针,如果 sMall 的值为 FALSE,则返回大图标链表指针。 其实现代码为 返回链表指针 CImageList* CSystemImageList: GetlmageList( bool bSmall /*=TRUE*/)const CImageList *pList- NULL if( sMall) pList=m gp SmalllmageList plist=m gpLargelmagelist return( pList ) 为 CSystemlmageList类添加成员函数 GetIcon,在其中完成根据参数返回指定文件 的图标句柄的功能。在函数 GetIcon中,对其入口参数进行判断,获取指定的文件名和 图标属性,并调用相应的 WindOws api函数,获取文件的属性。 其实现代码如下 返回指定文件的图标句柄 HICON CSyStemlmageList: GetIcon( const CString& sName, BOoL bOpen, booL bSmall SHFILEINFO Sfi 指定属性 dWoRd dw FlagS= SHGFI DISPLAYNAME SHGFI ICON SHGFI LARGEICON size t size= sizeof( SHFILEINFO);/得到缓冲区大小 if( sMall) dw Flags|= SHGFI SMALLICON;∥指定小图标属性 f( oPen dw Flags =SHGFI OPENICON 指定打开图标属性 ∥获取文件属性 SHGetFileInfo( sName, NULL, &sfi, size, SHGFI DISPLAYNAME SHGFI ICON SHGFI LARGEICON) return( sfi.hIcon);/返回图标句标 实现高级树形控件类 利用 MFC Class Wizard为工程添加一个新类 CDirfreeCtr类。如图11-11所示 P度 EXplorer Name. COi Trcclul DA.WMExp File same G布西 The Bair Flats dasi mnl trquirr a diala tauter 己b己 w Oninia N得 d OnOn w OnLy r Create atle try te ID 图11-11添加 CDir Ctr类 添加新类名称为 CDir ctrl,其父类为 CTreeCtrl类。下面就在 CDirtree ctrl类中 实现高级树形控件 初始化树形控件 为 CDirTree Ctrl类添加成员函数 Initialize,在其中完在对控件的初始化功能。在 Initialize函数中,主要进行向树控件的根部插入“我的电脑”和“桌面”两个节点的操 Visual c++简明教程 作。 在 Initialize函数中,分别调用 Insertltems函数向树控件的根节点处插入“我的电脑” 项和调用 AddIton函数向树控件的根节点处插入“桌面”项。其实现代码如下 ∥/初始化树控件 void CDir Tree Ctrl: Initialize LPITEMIDLIST itemlist char buf 256 int iDesktoplcon int iComputerIcon; DeleteAllltems(;∥清空所有控件节点 Setlmagelist(NUL,O);∥将控件的图像链表设为空 ∥得到“桌面”的磁盘全路径 SHGetSpecialFolderLocation(this->m hWnd, CSIDL DESKTOP, &itemlist) SHGetPath FromIDList(itemlist, buf m DesktopPath=; ∥创建图标链表 n ImageList. Create( GetSystemMetrIcS(SM CXSMICON GetSystemMetrICS(SM CYSMICON), Ⅱ LC COLOR24,50,50) ∥设置背景色 m ImageList. SetBk Color( GetSys Color(COLOR WINDOW)) iDesktopIcon= m ImageList. Add(∥将“桌面”图标加入链表 ExtractIon( Afx GetAppo> m hInstance," 'shell2d",34);/得到“桌面”图标 iComputerIcon= m ImageList. Addo∥将“我的电脑图标加入链表” ExtractIon( Afx GetA> m hInstance," shell2.d",15);∥得到“我的电脑”图标 m Drives root= InsertItems("我的电脑", TVI ROOT,true, iComputerIcon, iComputerIcon); m Desktoproot= AddItem(m DesktopPath, TVI ROOT, true, iDesktopIcon, iDesktopIcon) 为 CDirTree Ctrl类添加成员函数 Additem,在其中完成向树控件中插入节点的功能。 在 Additem函数中,首先进行插入节点的准备工作,其次调用另一成员函数 Insertltmes 完成节点的插入工作 其实现代码如下 向树控件中插入节点 HTREEITEM CDirTree Ctrl: AddItem(const char *path, HTREEITEM parent bool isDir, int icon Ex, int icon Ex2)

...展开详情
试读 33P C++资源管理器(制作步骤详细)
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    一个资源只可评论一次,评论内容不能少于5个字
    a547981661 功能比较简单 但是有点BUG
    2016-03-08
    回复
    小C大加 可以参考,不过有些BUG
    2014-12-14
    回复
    sanyecaojp 做参考用,很好
    2014-07-31
    回复
    zoutingbo 有些bug,不过还是十分感谢。
    2014-06-24
    回复
    promiseclx 以为是代码
    2014-04-10
    回复
    嘎子1985 谢谢分享,不知调试了没有
    2014-02-24
    回复
    JIANGDEFEI 可以参考,不过有些BUG
    2013-10-27
    回复
    鬼头猫 还不错, 源码有参考价值
    2013-03-28
    回复
    sunny969 能够运行,但是有错误,界面也不怎么好看
    2013-01-10
    回复
    Cy-Flash 不好用,BUG多
    2013-01-09
    回复
    • 分享宗师

      成功上传21个资源即可获取
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    C++资源管理器(制作步骤详细) 13积分/C币 立即下载
    1/33
    C++资源管理器(制作步骤详细)第1页
    C++资源管理器(制作步骤详细)第2页
    C++资源管理器(制作步骤详细)第3页
    C++资源管理器(制作步骤详细)第4页
    C++资源管理器(制作步骤详细)第5页
    C++资源管理器(制作步骤详细)第6页
    C++资源管理器(制作步骤详细)第7页
    C++资源管理器(制作步骤详细)第8页
    C++资源管理器(制作步骤详细)第9页
    C++资源管理器(制作步骤详细)第10页

    试读已结束,剩余23页未读...

    13积分/C币 立即下载 >