65.9K
CodeProject 正在变化。 阅读更多。
Home

CIconDialog - 选择图标

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (27投票s)

2002年3月27日

CPOL

3分钟阅读

viewsIcon

136145

downloadIcon

5783

CIconDialog 类允许您在应用程序中添加图标选择对话框

引言

本文的介绍是:“在开发向导应用程序时,我需要一个对话框从可执行文件中选择一个图标,但在 MSDN 中没有找到关于图标选择的任何内容。因此,我搜索了 CodeProject,找到了两篇关于图标选择的文章。第一个解决方案,由 PJ Naughter 撰写(文章 CIconDialog - 图标选择对话框),使用 CDialog 派生类和模板对话框资源来显示图标选择对话框并处理其行为;第二个解决方案,由 Henk Devos 撰写(文章 如何显示选择图标对话框),使用未记录的 Windows API 函数来显示系统内置的图标选择对话框。我更喜欢使用 Windows API,即使是未记录的,而不是拖动资源,因此编写了一个小类,封装了 Henk Devos 发布的 API。”。

但现在是 21 世纪,即使是未记录的函数也变得有文档记录了。因此,Microsoft 最终在 shell32.dll 5.0 导出中包含了我们通过序数 62 导入的函数名。它的名称是 PickIconDlg,并且只有 UNICODE 版本从 Windows 2000 开始可用。但为了兼容性,我们应该通过序数导入它,以便在 Windows NT4.0、Windows 95/98 和 Me 下使用,并在 Windows 2000 或更高版本下使用 ANSI 版本。

示例用法

CIconDialog 派生自 CCommonDialog,其行为类似于任何通用对话框。请参阅示例用法

//
#ifndef __ICONDLG_H__
    #include "IconDialog.h"
#endif
//...
void CSomeDialog::OnSomeBtnClicked( void ) 
{
    // If icon container file is not specified in the parameter,
    // then by default, it will open Shell32.dll file:
    // CIconDialog dlg( NULL, 0, this );
    //
    // You can specify any initial file name and icon index (if exist).
    // In this case it will open index + 1 icon
     // ( index is 0 - based ) selected:  
    
    CIconDialog dlg( _T( "%SystemRoot%\\system32\\SHELL32.dll" ), 
        148, this );

    if( dlg.DoModal() == IDOK  )
    {
        HICON hIcon = dlg.GetIconHandle();
        SetIcon( hIcon, FALSE );
    
        // Or:
        // HICON hIcon = ::ExtractIcon( AfxGetInstanceHandle(), 
        //          dlg.GetIconFile(), dlg.GetIconIndex() );
    }
    
}
//...

有关更多信息,请参阅演示项目源代码。

类成员

基类

  • CCommonDialog

数据成员

  • m_szIconFile - 指定图标文件名
  • m_dwIconIndex - 指定图标索引
  • m_hIconHandle - 包含图标句柄(上次打开)
  • m_uIconCount - 文件中的图标数量

然后,当你开始迭代 2(这是构建迭代的开始)时,你可能想要复制测试用例并将它们重新分类到迭代 2。这还允许对测试用例进行粒度跟踪,并允许你说某个测试用例在一个迭代中是准备好的,但在另一个迭代中不是。同样,如何做到这一点取决于你以及你希望如何报告。 “场景”部分提供了更多细节。

构造一个 CIconDialog 对象。

CIconDialog(LPCTSTR lpszIconFile = NULL, DWORD dwIconIndex = 0, CWnd* pParentWnd = NULL)
  • lpszIconFile - 初始图标库,应在对话框中打开其图标
  • dwIconIndex - 对话框打开时最初选择的图标索引
  • pParentWnd - 指向文件对话框对象的父窗口或所有者窗口的指针

操作

  • DoModal( void )- 显示对话框并允许用户进行选择
  • GetIconHandle( void ) const - 返回上次选择的图标的句柄
  • GetIconCount( void ) const - 返回所选图标文件的图标数量
  • GetIconIndex( void ) const - 返回所选图标的索引
  • GetIconFile( void ) const - 返回所选图标文件的完整路径

注释

此类的编译在级别 4 没有出现任何警告,并且完全支持 ANSI 和 UNICODE。

版本要求

最后,Microsoft 在 shell32.dll 5.0 或更高版本中包含了此类使用的 API 函数的支持。因此,我们在使用此类时没有缺少序数的问题

  • Windows 2000 Pro/Server - NT 5.0.2195 有/没有 SP1/SP2/SP3/SP4
  • Windows XP Professional - NT 5.1.2600 有/没有 SP1
  • Windows 2003 Server - NT 5.2 - Standard/Enterprise/Datacenter/Web Edition

在通过序数导入时,此类的测试和运行在以下版本下正常

  • Windows 95 OSR2 - 4.00.950B
  • Windows 98 - 4.10.1998
  • Windows 98 SE - 4.10.2222A ( 第二版 )
  • Windows Me - 4.90.3000
  • Windows NT 4.0 Workstation - NT 4.0.1381 带 SP 6i

它未经过测试(尽管预计可以正常运行)在以下版本下

  • Windows 95 - 4.00.950
  • Windows 95 SP1 - 4.00.950A
  • Windows 95 OSR 2.5 - 4.00.950C
  • Windows NT 4.0 Workstation - NT 4.0.1381 带 SP1-SP5
  • Windows NT 4.0 Server - NT 4.0.1381 带 SP1-SP6i

如果有人在上述 Windows 版本上测试过,请发表回复。

版本历史

  • 2002年3月27日
    • 发表文章
  • 2002年11月4日
    • 添加了对 MFC 6.0 和 7.0 的支持,一些代码更改
  • 2003年5月24日
    • 一些代码更改
    • 添加了更详细的版本支持
  • 2004年3月29日
    • 添加了新的 PickIconDlg 函数信息
© . All rights reserved.