level 5
faace
楼主
请问在mobile中怎么获取一个程序显示的那个图标资源,我现在的做法如下:
C/C++ code
PAINTSTRUCT pp;
HDC hdc = ::BeginPaint(m_hWnd, &pp);
#if 1
HICON largeIcon[10];
HICON smallIcon[10];
HICON hIcon = ExtractIconEx(_T("\\WLMMessenger.exe"), 1, largeIcon, smallIcon, 1);
for (int i = 0; i < 10; i++)
{
DrawIcon(hdc, 10, 10 * (i + 1), largeIcon[i]);
DrawIcon(hdc, 50, 10 * (i + 1), smallIcon[i]);
}
// DrawIcon(hdc, 10, 10, hIcon);
#else
SHFILEINFO fileInfo;
HIMAGELIST imagelist = (HIMAGELIST)SHGetFileInfo(_T("\\WLMMessenger.exe"), FILE_ATTRIBUTE_NORMAL, &fileInfo, sizeof(fileInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON);
if (fileInfo.hIcon)
{
DrawIcon(hdc, 10, 10, fileInfo.hIcon);
for (int i = 0; i < ImageList_GetImageCount(imagelist); i++)
ImageList_Draw(imagelist, i, hdc, 10 * (i + 1), 10 * (i + 1), ILD_NORMAL);
}
#endif
::EndPaint(m_hWnd, &pp);
用ExtractIconEx的方法,试了好几个参数都画不出图来。
用SHGetFileInfo的方法,获取到的是文件夹图标或者应用程序默认的图标(就是没有自己的图标时显示的那个)。
请问应该怎么做?
谢谢
对我有用[0]丢个板砖[0]引用举报管理TOP 回复次数:4
jiangyongtao
(世外涛缘)
等 级:
8
#1楼 得分:0回复于:2010-01-13 16:14:21
ExtractIconEx,楼主可以看看取得的Icon句柄是否为空。
SHGetFileInfo楼主可以参考下:http://blog.csdn.net/pknife/archive/2008/08/05/2772055.aspx
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:HOOK 回调里面WM_TIMER 消息 发在哪个消息循环里面了呢
kaiyi1986
等 级:
#2楼 得分:0回复于:2010-01-13 17:46:24
ExtractIconEx 句柄是为空的,参数设置有问题吗?
SHGetFileInfo 还是一样的,得到的iIcon总是为0,所以画出来的图像总是为文件夹的那个。
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:这视频太帅了!大家一定要看
kabing
(kabing)
等 级:
#3楼 得分:0回复于:2010-01-14 13:31:43
ExtractIconEx(_T("\\WLMMessenger.exe"), 0, largeIcon, smallIcon, 1);
试下
2010年01月23日 04点01分
1
C/C++ code
PAINTSTRUCT pp;
HDC hdc = ::BeginPaint(m_hWnd, &pp);
#if 1
HICON largeIcon[10];
HICON smallIcon[10];
HICON hIcon = ExtractIconEx(_T("\\WLMMessenger.exe"), 1, largeIcon, smallIcon, 1);
for (int i = 0; i < 10; i++)
{
DrawIcon(hdc, 10, 10 * (i + 1), largeIcon[i]);
DrawIcon(hdc, 50, 10 * (i + 1), smallIcon[i]);
}
// DrawIcon(hdc, 10, 10, hIcon);
#else
SHFILEINFO fileInfo;
HIMAGELIST imagelist = (HIMAGELIST)SHGetFileInfo(_T("\\WLMMessenger.exe"), FILE_ATTRIBUTE_NORMAL, &fileInfo, sizeof(fileInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON);
if (fileInfo.hIcon)
{
DrawIcon(hdc, 10, 10, fileInfo.hIcon);
for (int i = 0; i < ImageList_GetImageCount(imagelist); i++)
ImageList_Draw(imagelist, i, hdc, 10 * (i + 1), 10 * (i + 1), ILD_NORMAL);
}
#endif
::EndPaint(m_hWnd, &pp);
用ExtractIconEx的方法,试了好几个参数都画不出图来。
用SHGetFileInfo的方法,获取到的是文件夹图标或者应用程序默认的图标(就是没有自己的图标时显示的那个)。
请问应该怎么做?
谢谢
对我有用[0]丢个板砖[0]引用举报管理TOP 回复次数:4
jiangyongtao
(世外涛缘)
等 级:
8
#1楼 得分:0回复于:2010-01-13 16:14:21
ExtractIconEx,楼主可以看看取得的Icon句柄是否为空。
SHGetFileInfo楼主可以参考下:http://blog.csdn.net/pknife/archive/2008/08/05/2772055.aspx
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:HOOK 回调里面WM_TIMER 消息 发在哪个消息循环里面了呢
kaiyi1986
等 级:
#2楼 得分:0回复于:2010-01-13 17:46:24
ExtractIconEx 句柄是为空的,参数设置有问题吗?
SHGetFileInfo 还是一样的,得到的iIcon总是为0,所以画出来的图像总是为文件夹的那个。
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:这视频太帅了!大家一定要看
kabing
(kabing)
等 级:
#3楼 得分:0回复于:2010-01-14 13:31:43
ExtractIconEx(_T("\\WLMMessenger.exe"), 0, largeIcon, smallIcon, 1);
试下