在 Windows 10 上调用LoadIcon要求标准图标IDI_INFORMATION会产生以下图标:
另一方面,调用MessageBox传递IDI_INFORMATION会生成一个使用此图标的对话框:
如果明显的调用LoadIcon不这样做,我怎样才能获得第二个图标?
这感觉像是 user32.dll 中的一个错误,但 Windows 8 也有同样的问题,所以我想微软不在乎。
MessageBox您可以通过调用以下方式获取使用的平面图标SHGetStockIconInfo:
SHSTOCKICONINFO sii;
sii.cbSize = sizeof(sii);
if (SUCCEEDED(SHGetStockIconInfo(SIID_INFO, SHGSI_ICON|SHGSI_LARGEICON, &sii)))
{
// Use sii.hIcon here...
DestroyIcon(sii.hIcon);
}
Run Code Online (Sandbox Code Playgroud)
SHGetStockIconInfo是获取 Vista 及更高版本上的 Windows UI 中使用的图标的记录方法。大多数图标来自 imageres.dll,但您不应该假设情况是这样......