图像列表按比例缩放图标,尽管它们以请求的大小提供
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像列表按比例缩放图标,尽管它们以请求的大小提供相关的知识,希望对你有一定的参考价值。
我在使用Win32的Toolbar class时遇到了一些奇怪的行为。在低DPI显示器上,我希望我的工具栏使用24x24像素的图标,在更高的DPI显示器上,我希望我的工具栏使用48x48像素的图标。
我的代码看起来像这样:
tbil = ImageList_Create(icsize, icsize, ILC_COLOR32, 32, 32);
for(k = 0; k < sizeof(tblist) / sizeof(int); k++) {
hi = LoadIcon(hInstance, MAKEINTRESOURCE(tblist[k]));
ImageList_AddIcon(tbil, hi);
}
hToolbarWnd = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
WS_CHILD|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS|CCS_NORESIZE|CCS_NODIVIDER, 0, 0, 0, 0, hwnd, NULL, hInstance, NULL);
SendMessage(hToolbarWnd, TB_SETIMAGELIST, 0, (LPARAM) tbil);
SendMessage(hToolbarWnd, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0);
SendMessage(hToolbarWnd, TB_ADDBUTTONS, (WPARAM) sizeof(tbButton) / sizeof(TBBUTTON), (LPARAM) tbButton);
icsize
变量设置为24或48,具体取决于当前的DPI设置。
从我的资源加载的图标每个包含两个图像:一个在24x24中,一个在48x48中,我期待ImageList_AddIcon()
选择正确的图像,但显然情况并非如此,因为发生的情况是:在低DPI系统上(即应该使用24x24图标的系统)ImageList_AddIcon()
仍然添加48x48图标,但将其缩小到24x24,当然看起来很难看。
这是应该的方式吗?如果是的话,我该怎么处理呢?我必须使用单独的* .ico文件吗?一个用于24x24,一个用于48x48,而不是在单个* .ico文件中组合两种尺寸?这有点令人困惑,我没有在任何地方看到这个记录。
谢谢你的帮助。
答案
即使.ICO文件和图标资源(可能)由多个图标目录条目组成,LoadIcon也只会加载一个图标。它只加载系统默认大小的图标。这也是记录在案的:
LoadIcon只能加载大小符合SM_CXICON和SM_CYICON系统度量值的图标。
接下来是解决方案:
使用LoadImage函数加载其他大小的图标。
奖金阅读:
以上是关于图像列表按比例缩放图标,尽管它们以请求的大小提供的主要内容,如果未能解决你的问题,请参考以下文章