绘制16*16的图标

 今天想画一个16*16的图标,图标文件已在资源中创建,只有16*16有图,默认的32*32为空白。不过自己还是按照习惯,LoadIcon载入图标,然后DrawIcon绘制图标,结果什么也没有显示。

搜索LoadIcon函数的说明,发现这个函数只能处理32*32的图标,也就是只对符合SM_CXICON和SM_CYICON的规定大小的图标才有效。而且告知该函数已经被LoadImage替代。

好吧,那就用LoadImage来处理吧,把LoadImage函数中的图标宽度和高度参数都设置为16,完成图标句柄的生成,然后用DrawIcon绘图,结果发现图标变的好大,肯定不是16*16啊,郁闷。

继续查找DrawIcon函数的用法,晕啊,这个函数也只能绘制符合SM_CXICON和SM_CYICON规定大小的图标,如果你载入的图标不是这个尺寸,它就自动进行放缩了。现在我知道了,实际DrawIcon函数把我16*16的图标画成32*32的了。

哦,原来,想自己指定大小,还必须用DrawIconEx函数,这个函数中可以指定大小的。可又发现,CDC类居然没有封装这个函数,不得不用SDK的函数来处理了,DrawIconEx(dc.m_hDC,pt.x,pt.y,hIcon,16,16,0,NULL,DI_NORMAL);终于搞定。

附上最终的代码,因为网上我并没有找到完整的代码,或许是别人都会了吧。不过也许还有人和我一样还不会呢?

HICON hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_CLOSE),IMAGE_ICON, 16,16,0); CDC *pDC = GetDC(); CPoint pt(10,10); DrawIconEx(pDC->m_hDC,pt.x,pt.y,hIcon,16,16,0,NULL,DI_NORMAL); ReleaseDC(pDC); DeleteObject(hIcon);

你可能感兴趣的:(image,null)