⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 index131.htm

📁 一本不错的VC编程的参考书
💻 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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HPALETTE FAR* lphPalette)<Br>
{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;HRSRC  hRsrc;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;HGLOBAL hGlobal;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP hBitmapFinal = NULL;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;LPBITMAPINFOHEADER  lpbi;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;HDC hdc;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;int iNumColors;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;if (hRsrc = ::FindResource(hInstance, lpString, RT_BITMAP))<Br>
{<Br>
&nbsp;&nbsp;hGlobal = ::LoadResource(hInstance, hRsrc);<Br>
&nbsp;&nbsp;lpbi = (LPBITMAPINFOHEADER)LockResource(hGlobal);<Br>
&nbsp;&nbsp;hdc = ::GetDC(NULL);<Br>
&nbsp;&nbsp;*lphPalette =  CreateDIBPalette ((LPBITMAPINFO)lpbi, &iNumColors);<Br>
&nbsp;&nbsp;if (*lphPalette)<Br>
&nbsp;&nbsp;{<Br>
&nbsp;&nbsp;&nbsp;::SelectPalette(hdc,*lphPalette,FALSE);<Br>
&nbsp;&nbsp;&nbsp;::RealizePalette(hdc);<Br>
&nbsp;&nbsp;}<Br>
&nbsp;&nbsp;hBitmapFinal = ::CreateDIBitmap(hdc,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPBITMAPINFOHEADER)lpbi,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LONG)CBM_INIT,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPSTR)lpbi + lpbi->biSize + iNumColors * sizeof(RGBQUAD),<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPBITMAPINFO)lpbi,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIB_RGB_COLORS );<Br>
&nbsp;&nbsp;::ReleaseDC(NULL,hdc);<Br>
//  ::UnlockResource(hGlobal);<Br>
//  ::FreeResource(hGlobal);<Br>
}<Br>
&nbsp;&nbsp;&nbsp;&nbsp;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>
&nbsp;&nbsp;*lpiNumColors = (1 << lpbi->biBitCount);<Br>
else<Br>
&nbsp;&nbsp;*lpiNumColors = 0;  // No palette needed for 24 BPP DIB<Br>
if (lpbi->biClrUsed > 0)<Br>
&nbsp;&nbsp;*lpiNumColors = lpbi->biClrUsed;  // Use biClrUsed<Br>
if (*lpiNumColors)<Br>
{<Br>
&nbsp;&nbsp;hLogPal = GlobalAlloc (GHND, sizeof (LOGPALETTE) +<Br>
&nbsp;&nbsp;&nbsp;sizeof (PALETTEENTRY) * (*lpiNumColors));<Br>
&nbsp;&nbsp;lpPal = (LPLOGPALETTE) GlobalLock (hLogPal);<Br>
&nbsp;&nbsp;lpPal->palVersion    = 0x300;<Br>
&nbsp;&nbsp;lpPal->palNumEntries = *lpiNumColors;<Br>
&nbsp;&nbsp;for (i = 0;  i < *lpiNumColors;  i++)<Br>
&nbsp;&nbsp;{<Br>
&nbsp;&nbsp;&nbsp;lpPal->pal<Br>
PalEntry[i].<Br>
peRed   = lpbmi->bmiColors[i].rgbRed;<Br>
&nbsp;&nbsp;&nbsp;lpPal->palPalEntry[i].peGreen = lpbmi->bmiColors[i].rgbGreen;<Br>
&nbsp;&nbsp;&nbsp;lpPal->palPalEntry[i].peBlue  = lpbmi->bmiColors[i].rgbBlue;<Br>
&nbsp;&nbsp;&nbsp;if (i<=10 || i>=246)<Br>
&nbsp;&nbsp;&nbsp;&nbsp;lpPal->palPalEntry[i].peFlags = PC_NOCOLLAPSE;<Br>
&nbsp;&nbsp;&nbsp;else<Br>
&nbsp;&nbsp;&nbsp;&nbsp;lpPal->palPalEntry[i].peFlags = 0;<Br>
&nbsp;&nbsp;}<Br>
&nbsp;&nbsp;hPal = CreatePalette (lpPal);<Br>
&nbsp;&nbsp;GlobalUnlock (hLogPal);<Br>
&nbsp;&nbsp;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 + -