- UID
- 3684
- 积分
- 844
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-4-8
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- [FONT=courier new]
- CImageList * Utils::ViewAllBlock(const char* pFileName)
- {
- CBitmap *pBitmap = NULL;
- CImageList *pImageList = new CImageList();
- pImageList->Create(32,32,FALSE,0,1);
- CString sFile = WinUtils::CreatTempFile(_T(""));
- Acad::ErrorStatus es;
- AcDbBlockTable *pTable = NULL;
- AcDbBlockTableRecord *pRec = NULL;
- AcDbBlockTableRecord::PreviewIcon PreviewIcon;
- AcDbDatabase *pDb = NULL;
- bool bHas = false;
- AcDbBlockTableIterator* pIT = NULL;
- int i = 0;
- BITMAPFILEHEADER bfHeader;
- BITMAPINFOHEADER biHeader;
- DWORD dwTmp;
- HANDLE hf; // file handle
-
- biHeader.biSize = 40;
- biHeader.biWidth = 32;
- biHeader.biHeight = 32;
- biHeader.biPlanes = 1;
- biHeader.biBitCount = 8;
- biHeader.biCompression = 0;
- biHeader.biSizeImage = 1024;
- biHeader.biXPelsPerMeter = 0;
- biHeader.biYPelsPerMeter = 0;
- biHeader.biClrUsed = 0;
- biHeader.biClrImportant = 0;
-
- //
- int clrTableSize;
- if (biHeader.biBitCount < 9)
- {
- clrTableSize = 4 * ldexp(1, biHeader.biBitCount);
- }
- else
- {
- clrTableSize = 0;
- }
-
- // ' Fill the BITMAPFILEHEADER structure
- bfHeader.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M" // ' Image type
- bfHeader.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + biHeader.biSize + clrTableSize + biHeader.biSizeImage); //' Length of file (in bytes)
- bfHeader.bfOffBits = (DWORD) (sizeof(BITMAPFILEHEADER) + biHeader.biSize + clrTableSize);
- bfHeader.bfReserved1 = 0;
- bfHeader.bfReserved2 = 0;
-
- if (pFileName == _T(""))
- {
- pDb = acdbCurDwg();
- pDb->getBlockTable(pTable,AcDb::kForRead);
-
- if (Acad::eOk != pTable->newIterator( pIT ))
- {
- pTable->close();
- return NULL;
- }
- for (pIT->start(); !pIT->done(); pIT->step())
- {
- if (pIT->getRecord(pRec,AcDb::kForRead) != Acad::eOk)
- {
- pTable->close();return NULL;
- }
- bHas = pRec->hasPreviewIcon();
- if (bHas)
- {
- pRec->getPreviewIcon(PreviewIcon);
- // Create the .BMP file.
- hf = CreateFile(sFile, GENERIC_READ | GENERIC_WRITE, (DWORD) 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
-
- // Copy the BITMAPFILEHEADER into the .BMP file.
- if (!WriteFile(hf, (LPVOID) &bfHeader, sizeof(BITMAPFILEHEADER),(LPDWORD) &dwTmp, NULL))
- {
- CloseHandle(hf); pRec->close();pTable->close();
- return NULL;
- }
-
- int nLength = PreviewIcon.length();
- for (i = 0; i< nLength;i++)
- {
- BYTE BTemp = PreviewIcon.at(i);
- if (!WriteFile(hf, (LPVOID)&BTemp, 1,(LPDWORD) &dwTmp, NULL))
- {
- CloseHandle(hf);pRec->close();pTable->close();
- return NULL;
- }
- }
-
- // Close the .BMP file.
- if (!CloseHandle(hf)) {pRec->close();pTable->close();return NULL;}
- pBitmap = new CBitmap();
- HBITMAP hBitmap;
- hBitmap = (HBITMAP)LoadImage(NULL, sFile, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
- if (!hBitmap)
- {
- pRec->close();pTable->close();
- return NULL;
- }
- CBitmap Bitmap;
- pBitmap = Bitmap.FromHandle(hBitmap);
-
- int ii = pImageList->Add(pBitmap,RGB(0,0,0));
- }
- pRec->close();
- }
- pTable->close();
- }
- else{
- .....
- }
- delete pIT;
- return pImageList;
-
- }
- [/FONT]
复制代码
这个程序被我丢弃了很长时间了,差点找不着了,呵呵.
因为是以前写的,有很多漏洞,请大家指出
刚发现:如果不成功,要delete pImageList; |
|