程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> CImageList控件中圖象橙色被顯示為黃色?

CImageList控件中圖象橙色被顯示為黃色?

編輯:關於C語言

 

 

使用一個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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved