我用两种方式加载图标
一种是事先导入到资源:
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"

解决方案 »

  1.   

    在VC里资源显示方式有几种形式的,16*16;32*32;48*48 而且也有颜色的深度设置确保在以上形式上都一致,如果::LoadIcon(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1)); 使用的是16*16的方式,而你要显示为48*48的大小,那肯定失真了
      

  2.   

    MSDN上CWinApp::LoadIcon
    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大小的就会失真,这个参数应该可以被修改的
      

  3.   

    是不是原图标大小与画出来的图标大小不一致?图标不会变大 除非如上面所说 但失真则有可能.
    HICON icon2 = (HICON)::LoadImage(AfxGetApp()->m_hInstance,"res\\1381love.ico",IMAGE_ICON0,0,0,LR_LOADFROMFILE);参数设置为0 则使用原来的大小 然后
    GetObject()取得icon2 对象的大小属性 然后再使用获得对象属性的大小来DrawIconEx().
      

  4.   

    LoadIcon会自动把图标转换成标准图标大小的图片,所以会失真。LoadImage不会有这个转换,所以没有失真。
      

  5.   

    LoadIcon会自动把图标转换成标准图标大小的图片,所以会失真。LoadImage不会有这个转换,所以没有失真。==================================
    谢谢以上所有人,明白了
    在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