我正在开发 Windows 应用程序,接收电子邮件。与此同时,我想在下载附件之前显示附件的图标。在那一刻,我有了一个 MimeType。
有没有办法只从 MimeType 获取系统图标?
SHGetFileInfo
,但我希望在下载之前有图标。
是的,您可以检索特定文件类型(由 MIME 类型确定)的系统图标,而无需实际将文件存储在磁盘上。要在 Windows 上实现此目的,您可以使用
SHGetFileInfo
函数以及 SHGFI_USEFILEATTRIBUTES
标志。
这是一个 C++ 的简短示例:
#include <Windows.h>
#include <ShlObj.h>
HICON GetIconForMimeType(const wchar_t* mimeType) {
SHFILEINFO sfi;
memset(&sfi, 0, sizeof(sfi));
// Use the SHGFI_USEFILEATTRIBUTES flag to specify that we are providing a file type (MIME type)
SHGetFileInfo(mimeType, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES);
// Check if the function succeeded in getting the icon
if (sfi.hIcon)
return sfi.hIcon;
// Return a default icon if the function fails
return LoadIcon(nullptr, IDI_APPLICATION);
}
int main() {
// Example: Get icon for a JPEG image (change the MIME type accordingly)
const wchar_t* mimeType = L"image/jpeg";
HICON icon = GetIconForMimeType(mimeType);
// Now you can use the 'icon' handle as needed (e.g., display it in your application)
// ...
// Don't forget to clean up the icon handle when you're done with it
DestroyIcon(icon);
return 0;
}
将
image/jpeg
替换为附件的 MIME 类型。此代码检索与指定文件类型关联的图标,而不需要磁盘上的实际文件。
确保包含必要的标头(
Windows.h
和 ShlObj.h
)并链接到所需的库。
请记住在应用程序中适当处理错误和边缘情况。