我用两种方式加载图标
一种是事先导入到资源:
HICON icon1 = ::LoadIcon(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
一种是直接导入图标文件:
HICON icon2 = (HICON)::LoadImage(AfxGetApp()->m_hInstance,"res\\1381love.ico",IMAGE_ICON,24,24,LR_LOADFROMFILE);HDC hDC = ::GetDC(m_hWnd);然后用DrawIcon() 时,发现两种方式的图标都变大了,资源方式的边缘有失真(与文件导入方式比较起来很明显),
改用
DrawIconEx(hDC,0,0,icon1,24,24,0,NULL,DI_NORMAL);
DrawIconEx(hDC,0,24,icon2,24,24,0,NULL,DI_NORMAL);固定为原图标大小,资源导入方式的图标边缘还是失真,文件导入方式则正常.
为什么会这样的? 我用 VC6.0 VS2005 结果一样
图标用的是 QQ2007 安装目录下 "\NewSkins\1381love.ico"
一种是事先导入到资源:
HICON icon1 = ::LoadIcon(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
一种是直接导入图标文件:
HICON icon2 = (HICON)::LoadImage(AfxGetApp()->m_hInstance,"res\\1381love.ico",IMAGE_ICON,24,24,LR_LOADFROMFILE);HDC hDC = ::GetDC(m_hWnd);然后用DrawIcon() 时,发现两种方式的图标都变大了,资源方式的边缘有失真(与文件导入方式比较起来很明显),
改用
DrawIconEx(hDC,0,0,icon1,24,24,0,NULL,DI_NORMAL);
DrawIconEx(hDC,0,24,icon2,24,24,0,NULL,DI_NORMAL);固定为原图标大小,资源导入方式的图标边缘还是失真,文件导入方式则正常.
为什么会这样的? 我用 VC6.0 VS2005 结果一样
图标用的是 QQ2007 安装目录下 "\NewSkins\1381love.ico"
解决方案 »
- 全局函数中((CComboBox*)g_hWndCombox)->InsertString问题
- 求一高速公路收费系统的源码
- 升级VS后调用DLL出错
- 简单的编译问题....!
- 请问如何更改系统默认的颜色?背景的,控件的,等等?
- 【版务】VC/MFC版 导分投诉 及 导分处理公告 专帖
- 用vc如何统计系统的cpu和内存使用情况?
- 如何建立一个对话框的类,包含一定资源
- 怎样调用CView::OnDraw()函数?
- 准备做毕业设计,是关于超分辨率重建和复原方面的,请问哪位有超分辨率重建的方法的源代码,pocs 的源代码或者MAP的源代码,必谢!
- 关于复选框的一点问题
- 请问:在VC程序中如何获得IE窗口中控件的内容
This method loads the icon resource named by lpszResourceName or specified by nIDResource from the executable file. LoadIcon loads the icon only if it has not been previously loaded; otherwise, it retrieves a handle of the existing resource. You can use the LoadStandardIcon or LoadOEMIcon method to access the predefined Windows CE icons.This method calls the Windows CE API function LoadIcon, which can only load an icon whose size conforms to the SM_CXICON and SM_CYICON system metric values.请看最后一句,SM_CXICON、SM_CYICON为系统参数,你可以查看一下它的数值是什么,如果是16,那么要显示48大小的就会失真,这个参数应该可以被修改的
HICON icon2 = (HICON)::LoadImage(AfxGetApp()->m_hInstance,"res\\1381love.ico",IMAGE_ICON0,0,0,LR_LOADFROMFILE);参数设置为0 则使用原来的大小 然后
GetObject()取得icon2 对象的大小属性 然后再使用获得对象属性的大小来DrawIconEx().
谢谢以上所有人,明白了
在MSDN找到关于LoadIcon (是API,不是CWinApp::LoadIcon)的以下说明LoadIcon can only load an icon whose size conforms to the SM_CXICON and SM_CYICON system metric values. Use the LoadImage function to load icons of other sizes.SM_CXICON SM_CYICON 能改?怎么改啊?如果不用读取文件的方式来加载,又不让图标失真应该怎么做呢?
PS:我不想发布个exe又要附带一些ico