设为首页 加入收藏

TOP

CImageList控件中图象橙色被显示为黄色?
2014-11-23 20:16:23 来源: 作者: 【 】 浏览:9
Tags:CImageList 控件 图象 橙色 显示 黄色

使用一个CImageList控件来装入位图,用于TREE控件,其它的色彩都很正常就是橙色被显示成为黄色.

你只能使用系统指定的20种颜色(橙色不包括在内);当然,你也可以用下面的方法来装载位图资源而不受颜色数的限制.

HBITMAP LoadResourceBitmap(HINSTANCE hInstance, LPSTR lpString,

HPALETTE FAR* lphPalette)

{

HRSRC hRsrc;

HGLOBAL hGlobal;

HBITMAP hBitmapFinal = NULL;

LPBITMAPINFOHEADER lpbi;

HDC hdc;

int iNumColors;

if (hRsrc = ::FindResource(hInstance, lpString, RT_BITMAP))

{

hGlobal = ::LoadResource(hInstance, hRsrc);

lpbi = (LPBITMAPINFOHEADER)LockResource(hGlobal);

hdc = ::GetDC(NULL);

*lphPalette = CreateDIBPalette ((LPBITMAPINFO)lpbi, &iNumColors);

if (*lphPalette)

{

::SelectPalette(hdc,*lphPalette,FALSE);

::RealizePalette(hdc);

}

hBitmapFinal = ::CreateDIBitmap(hdc,

(LPBITMAPINFOHEADER)lpbi,

(LONG)CBM_INIT,

(LPSTR)lpbi + lpbi->biSize + iNumColors * sizeof(RGBQUAD),

(LPBITMAPINFO)lpbi,

DIB_RGB_COLORS );

::ReleaseDC(NULL,hdc);

// ::UnlockResource(hGlobal);

// ::FreeResource(hGlobal);

}

return (hBitmapFinal);

}

// internally used by LoadResourceBitmap

HPALETTE CreateDIBPalette (LPBITMAPINFO lpbmi, LPINT lpiNumColors)

{

LPBITMAPINFOHEADER lpbi;

LPLOGPALETTE lpPal;

HANDLE hLogPal;

HPALETTE hPal = NULL;

int i;

lpbi = (LPBITMAPINFOHEADER)lpbmi;

if (lpbi->biBitCount <= 8)

*lpiNumColors = (1 << lpbi->biBitCount);

else

*lpiNumColors = 0; // No palette needed for 24 BPP DIB

if (lpbi->biClrUsed > 0)

*lpiNumColors = lpbi->biClrUsed; // Use biClrUsed

if (*lpiNumColors)

{

hLogPal = GlobalAlloc (GHND, sizeof (LOGPALETTE) +

sizeof (PALETTEENTRY) * (*lpiNumColors));

lpPal = (LPLOGPALETTE) GlobalLock (hLogPal);

lpPal->palVersion = 0x300;

lpPal->palNumEntries = *lpiNumColors;

for (i = 0; i < *lpiNumColors; i++)

{

lpPal->pal

PalEntry[i].

peRed = lpbmi->bmiColors[i].rgbRed;

lpPal->palP

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇创建适用于多种容器的控件 下一篇为树控制设置背景图象

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: