📄 index131.htm
字号:
<html>
<style type="text/css"><!--
.p9 { font-family: "宋体"; font-size: 9pt}a {text-transform: none; text-decoration: none;}
a:hover {text-decoration: underline; color: #FF0000;}
--></style>
<body background="../di2001.jpg">
<h3 align="center"><font COLOR="#AOAO99"></font></h3>
<table width="100%" border="1" cellspacing="1">
<tr><td><p align="center"><font color="#FF0000">CImageList控件中图象橙色被显示为黄色?</font></td></tr>
<tr><td><p>
</Br>
我使用了一个CImageList控件来装入位图,用于TREE控件,其它的色彩都很正常就是橙色被显示成为黄色.<Br>
</Br>
你只能使用系统指定的20种颜色(橙色不包括在内);当然,你也可以用下面的方法来装载位图资源而不受颜色数的限制.<Br>
</Br>
HBITMAP LoadResourceBitmap(HINSTANCE hInstance, LPSTR lpString,<Br>
HPALETTE FAR* lphPalette)<Br>
{<Br>
HRSRC hRsrc;<Br>
HGLOBAL hGlobal;<Br>
HBITMAP hBitmapFinal = NULL;<Br>
LPBITMAPINFOHEADER lpbi;<Br>
HDC hdc;<Br>
int iNumColors;<Br>
if (hRsrc = ::FindResource(hInstance, lpString, RT_BITMAP))<Br>
{<Br>
hGlobal = ::LoadResource(hInstance, hRsrc);<Br>
lpbi = (LPBITMAPINFOHEADER)LockResource(hGlobal);<Br>
hdc = ::GetDC(NULL);<Br>
*lphPalette = CreateDIBPalette ((LPBITMAPINFO)lpbi, &iNumColors);<Br>
if (*lphPalette)<Br>
{<Br>
::SelectPalette(hdc,*lphPalette,FALSE);<Br>
::RealizePalette(hdc);<Br>
}<Br>
hBitmapFinal = ::CreateDIBitmap(hdc,<Br>
(LPBITMAPINFOHEADER)lpbi,<Br>
(LONG)CBM_INIT,<Br>
(LPSTR)lpbi + lpbi->biSize + iNumColors * sizeof(RGBQUAD),<Br>
(LPBITMAPINFO)lpbi,<Br>
DIB_RGB_COLORS );<Br>
::ReleaseDC(NULL,hdc);<Br>
// ::UnlockResource(hGlobal);<Br>
// ::FreeResource(hGlobal);<Br>
}<Br>
return (hBitmapFinal);<Br>
}<Br>
</Br>
// internally used by LoadResourceBitmap<Br>
HPALETTE CreateDIBPalette (LPBITMAPINFO lpbmi, LPINT lpiNumColors)<Br>
{<Br>
LPBITMAPINFOHEADER lpbi;<Br>
LPLOGPALETTE lpPal;<Br>
HANDLE hLogPal;<Br>
HPALETTE hPal = NULL;<Br>
int i;<Br>
lpbi = (LPBITMAPINFOHEADER)lpbmi;<Br>
if (lpbi->biBitCount <= 8)<Br>
*lpiNumColors = (1 << lpbi->biBitCount);<Br>
else<Br>
*lpiNumColors = 0; // No palette needed for 24 BPP DIB<Br>
if (lpbi->biClrUsed > 0)<Br>
*lpiNumColors = lpbi->biClrUsed; // Use biClrUsed<Br>
if (*lpiNumColors)<Br>
{<Br>
hLogPal = GlobalAlloc (GHND, sizeof (LOGPALETTE) +<Br>
sizeof (PALETTEENTRY) * (*lpiNumColors));<Br>
lpPal = (LPLOGPALETTE) GlobalLock (hLogPal);<Br>
lpPal->palVersion = 0x300;<Br>
lpPal->palNumEntries = *lpiNumColors;<Br>
for (i = 0; i < *lpiNumColors; i++)<Br>
{<Br>
lpPal->pal<Br>
PalEntry[i].<Br>
peRed = lpbmi->bmiColors[i].rgbRed;<Br>
lpPal->palPalEntry[i].peGreen = lpbmi->bmiColors[i].rgbGreen;<Br>
lpPal->palPalEntry[i].peBlue = lpbmi->bmiColors[i].rgbBlue;<Br>
if (i<=10 || i>=246)<Br>
lpPal->palPalEntry[i].peFlags = PC_NOCOLLAPSE;<Br>
else<Br>
lpPal->palPalEntry[i].peFlags = 0;<Br>
}<Br>
hPal = CreatePalette (lpPal);<Br>
GlobalUnlock (hLogPal);<Br>
GlobalFree (hLogPal);<Br>
}<Br>
return hPal;<Br>
}<Br>
该函数也重载了位图调色板,这个功能被CBitmap::LoadBitmap忽略了(它假定位图只使用20种颜色).因此要保证在DC中有SelectPalette和RealizePalette.<Br>
</Br>
</Br>
</p></td></tr>
</table>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -