Windows Shell中更改图标的未文档化功能

在Windows操作系统中,当用户需要更改程序或文件的图标时,通常会通过Windows Shell显示的“更改图标”对话框来实现。然而,这个功能背后的函数是未文档化的,这意味着它没有在官方文档中被详细说明。本文将解释如何使用这个未文档化的函数PickIconDlg来实现更改图标的功能。

要调用这个对话框,需要使用一个名为PickIconDlg的函数。这个函数是由shell32.dll库导出的,并且它的序号是62。但是,这个函数有一个缺点:在Windows NT和Windows 95/98中,它的签名是不同的。因此,编写了一个包装器函数,它能够动态地绑定到shell32.dll,并在必要时转换参数。

提供了两个版本的包装器函数:一个是Unicode版本,另一个是ANSI版本。这个函数会返回包含图标的文件名和图标的索引。这是一个从零开始的索引,而不是资源ID。这意味着可以使用ExtractIcon函数来提取图标。

以下代码片段(来自附带的示例项目)展示了如何调用包装器函数:

if (::SelectIcon(m_hWnd, m_pszCurrentFile, MAX_PATH, &m_dwCurrentIndex)) { m_hIcon = ::ExtractIcon(::AfxGetInstanceHandle(), m_pszCurrentFile, m_dwCurrentIndex); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); }

这段代码首先调用SelectIcon函数,传入窗口句柄、当前文件路径、路径长度和图标索引的指针。如果函数调用成功,它会返回一个非零值。然后,使用返回的索引调用ExtractIcon函数来提取图标,并使用SetIcon函数将图标设置到窗口上。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485