/// <summary>Draws the specified dc.</summary> /// <param name="dc">dc.</param> /// <param name="image">image index.</param> /// <param name="rc">target rectangle.</param> /// <param name="sz">image size.</param> /// <param name="state">optionally ODS_DISABLED or ODS_SELECTED.</param> /// <returns></returns> BOOL ImageListEx::Draw(CDC& dc, UINT image, CRect rc, CSize sz, UINT state /*= NULL*/) { IMAGELISTDRAWPARAMS oDrawData; // Prepare ZeroMemory(&oDrawData, sizeof(IMAGELISTDRAWPARAMS)); oDrawData.cbSize = sizeof(IMAGELISTDRAWPARAMS); // Centre icon within drawing rectangle CRect draw(rc.CenterPoint(), CSize(0,0)); draw.InflateRect(sz.cx/2, sz.cy/2); // Set properties oDrawData.himl = GetSafeHandle(); oDrawData.i = image; oDrawData.hdcDst = dc.m_hDC; oDrawData.x = draw.left; oDrawData.y = draw.top; oDrawData.fStyle = ILD_TRANSPARENT; // Disabled: if (state & ODS_DISABLED) oDrawData.fState = ILS_SATURATE; // Selected: else if (state & ODS_SELECTED) { oDrawData.rgbFg = CLR_DEFAULT; oDrawData.fStyle |= ILD_BLEND; } /// Draw icon return ImageList_DrawIndirect(&oDrawData); }
///////////////////////////////////////////////////////////////////////////// // Func. Name : CreateDIBSection // Parameters : // Return : // Remarks : // void CDibBitmap::CreateDIBSection(CDC* dc,CDibPalette* pal,int xl,int yl,WORD nBitCount) { m_nWidth = xl; m_nHeight = abs(yl); xl = xl + ((xl % 4) ? (4 - xl % 4) : 0); if(GetSafeHandle() && GetBitCount() == nBitCount && xl == GetWidth() && abs(yl) == GetHeight()) return; LPBITMAPINFO bitmapInfo = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER)+256*sizeof(DWORD)]; BITMAPINFOHEADER header = { 40,640,-480,1,8,0,0,5904,5904,256,0 }; header.biBitCount = nBitCount; header.biWidth = xl; header.biHeight = -abs(yl); memcpy(bitmapInfo,&header,sizeof(header)); memcpy(&m_infoHeader,&header,sizeof(header)); LPRGBQUAD pRGB = (RGBQUAD*) ((LPBYTE)bitmapInfo + sizeof(BITMAPINFOHEADER)); //if(pal) pal->GetPaletteRGBQuad(0,256,pRGB); memset(pRGB,0,256*sizeof(RGBQUAD)); Attach(::CreateDIBSection(dc->GetSafeHdc(),bitmapInfo,DIB_RGB_COLORS,(void**)&m_pData,NULL,0)); safe_delete( bitmapInfo ); }
BOOL CImageRegion::IsEmpty() { return GetSafeHandle()==NULL; }