Community
Hi,
I have the following doubts.
How to display the Block Preview in MFC DialogBox?
how to use getPreviewIcon() method of AcdbBlockTableRecord?
Thanks In Advance
Sivasankarirajesh
HI,
You can use something like this:
HDIB_ getHDib(LPVOID pDibSrc) { LPBITMAPINFOHEADER pbmih = (LPBITMAPINFOHEADER)pDibSrc; //*iWidth = pbmih->biWidth; //*iHeight = pbmih->biHeight; DWORD totalSize = pbmih->biSize + pbmih->biSizeImage + (DWORD)getPaletteSize((LPSTR)pbmih); HANDLE hdib = GlobalAlloc(GHND, totalSize); LPVOID pDibDst = GlobalLock(hdib); CopyMemory(pDibDst, pDibSrc, totalSize); GlobalUnlock(hdib); return (HDIB_)hdib ; } HBITMAP getHBitmapFromDib(HANDLE hdib, HPALETTE hpal) { LPBITMAPINFOHEADER lpbi; HPALETTE hpalT; HDC hdc; HBITMAP hbm; if (!hdib) return NULL; lpbi = (LPBITMAPINFOHEADER)GlobalLock(hdib); if (!lpbi) return NULL; hdc = GetDC(NULL); if (hpal){ hpalT = SelectPalette(hdc,hpal,FALSE); RealizePalette(hdc); // GDI Bug...???? } hbm = CreateDIBitmap(hdc, (LPBITMAPINFOHEADER)lpbi, (LONG)CBM_INIT, (LPSTR)lpbi + lpbi->biSize + getPaletteSize((LPSTR)lpbi), (LPBITMAPINFO)lpbi, DIB_RGB_COLORS ); if (hpal) SelectPalette(hdc,hpalT,FALSE); ReleaseDC(NULL,hdc); GlobalUnlock(hdib); return hbm; } AcDbBlockTableRecord::PreviewIcon previewIcon; if(pBlockRecord->getPreviewIcon(previewIcon) == Acad::eOk) { HBITMAP hBitmap = getHBitmapFromDib(getHDib((LPVOID)previewIcon.asArrayPtr()), NULL); //... }
And do what you want with the HBITMAP.
Regards,