还没想到原因

解决方案 »

  1.   

    可能是Icon中夹杂了一些透明色,显示在不同背景上整体亮度会有所不同,可以用Alt+Print Screen键抓图,用画图工具放大对比来看。
    还有一种可能就是明暗不同的背景给人造成的视觉误差。
      

  2.   

    会不会是在内存DC里先画好再画到窗口上去的(双缓冲)? 如果这种情况很可能是内存DC色彩数不同引起的。
      

  3.   

    毛毛,你说得没错,可是刚才我看了下DC的各个色彩方面的属性,都是一样的。
    两个ICON,一个画在mem DC上,该mem DC背后是一个      bmi.bmiHeader.biBitCount = 32;
          bmi.bmiHeader.biCompression = BI_RGB;的DIB section。最后画到窗口上,另一个没用mem DC,直接画到窗口上的。
      

  4.   

    两个icon差别相当明显,应该不是视觉上的误判。
      

  5.   

    一个dc,是client dc:
    dc.DrawIconEx(10,20,m_favicon,16,16);
    另一个是memeory dc,该dc创建了一个DIB Section:
          CDC dc;
          dc.CreateCompatibleDC();
          BITMAPINFO bmi = { 0 };
          bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
          bmi.bmiHeader.biWidth = rcButton.Width() * NUM_STATES;
          bmi.bmiHeader.biHeight = rcButton.Height();
          bmi.bmiHeader.biPlanes = 1;
          bmi.bmiHeader.biBitCount = 32;
          bmi.bmiHeader.biCompression = BI_RGB;
          LPVOID pData = NULL;
          m_bmpButton.CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, &pData, NULL, 0);
    dc.DrawIconEx(xoffset,ptMiddle.y - (16 / 2),icoIcon,16,16);
      

  6.   

    图片防盗链,好不容易找到,感觉是画的时候进行了ALPHA混合,你窗口是半透明的?
    或者是颜色数的问题,内存BMP用CreateCompatibleBitmap创建试试。
      

  7.   

    用gdi+简单转icon成bitmap后再画就解决了,不过还没找到原因。