乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: LE3

[编程交流] AcDb块选项卡le记录:获取预览Wicon

[复制链接]
LE3

10

主题

149

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
189
发表于 2010-4-22 18:58:34 | 显示全部楼层

票是什么?时间还早,我还没有喝咖啡
回复

使用道具 举报

LE3

10

主题

149

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
189
发表于 2010-4-22 19:02:58 | 显示全部楼层
块视图示例...呵呵....
回复

使用道具 举报

27

主题

193

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2010-4-22 19:14:17 | 显示全部楼层
太好了,谢谢你的确认,街区视图样本是我应该看的
回复

使用道具 举报

LE3

10

主题

149

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
189
发表于 2010-9-15 06:39:18 | 显示全部楼层
那么现在我可以获得我的块的视图,那么关于如何通过MFC创建块图标数组的任何想法?
这是我一直在努力的工作,但我没有太多的运气
  1. #pragma once
  2. #include "afxwin.h"
  3. class CGsPreviewCtrl : public CStatic
  4. {
  5. public:
  6.   AcGsManager         *mpManager;
  7.   AcGsClassFactory    *mpFactory;
  8.   AcGsDevice          *mpDevice;
  9.   AcGsView            *mpView;
  10.   AcGsModel           *mpModel;
  11.   bool mbModelCreated;
  12.   AcGeVoidPointerArray mEntities;
  13. public:
  14.   CGsPreviewCtrl(void);
  15.   virtual ~CGsPreviewCtrl(void);
  16. protected:
  17.   afx_msg    void OnPaint(void);
  18. public:
  19.   bool       Add(AcGiDrawable *item, AcGsModel* pModel);
  20.   void       SetModel(AcGsModel* pModel);
  21.   void       ClearAll(void);
  22.   void       ErasePreview(void);
  23.   void       Init(HMODULE hRes, bool bCreateModel);
  24.   AcGsView*  view(void) const;
  25.   AcGsModel* model(void) const;
  26.   bool       GetPreviewIcon(AcDbBlockTableRecord::PreviewIcon &icn);
  27.   DECLARE_MESSAGE_MAP()
  28. };
  29. inline AcGsView* CGsPreviewCtrl::view() const
  30. {
  31.   return mpView;
  32. }
  33. inline AcGsModel* CGsPreviewCtrl::model() const
  34. {
  35.   return mpModel;
  36. }

和问题区域
  1. bool CGsPreviewCtrl::GetPreviewIcon( AcDbBlockTableRecord::PreviewIcon &icn )
  2. {
  3.   CDC   *view = GetDC();
  4.   HDC   hview = view->GetSafeHdc();
  5.   HDC                hCompDC        = CreateCompatibleDC(hview);
  6.   int                nWidth        = 32;
  7.   int                nHeight        = 32;
  8.   HBITMAP        hBmp        = CreateCompatibleBitmap(hview, nWidth, nHeight);
  9.   HBITMAP        hOld        = (HBITMAP)SelectObject(hCompDC, hBmp);
  10.   BitBlt(hCompDC, 0, 0, nWidth, nHeight, hview, 0, 0, SRCCOPY);
  11.   
  12.   BITMAP bmp;
  13.   GetObject(hBmp, sizeof(BITMAP), (void*)&bmp);
  14.   BITMAPINFOHEADER   bi;
  15.   ZeroMemory(&bi,sizeof(BITMAPINFOHEADER));
  16.   bi.biSize = sizeof(BITMAPINFOHEADER);   
  17.   bi.biWidth = bmp.bmWidth;   
  18.   bi.biHeight = bmp.bmHeight;  
  19.   bi.biPlanes = 1;   
  20.   bi.biBitCount = 32;   
  21.   bi.biCompression = BI_RGB;   
  22.   DWORD dwBmpSize = ((bmp.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmp.bmHeight;
  23.   HANDLE hDIB = GlobalAlloc(GHND,dwBmpSize);
  24.   Adesk::UInt8 *bmpBuffer = (Adesk::UInt8*)GlobalLock(hDIB);   
  25.   
  26.   int res = GetDIBits(hview, hBmp, 0,(UINT)bmp.bmHeight, bmpBuffer,(BITMAPINFO *)&bi, DIB_RGB_COLORS);
  27.   icn.setLogicalLength(dwBmpSize);
  28.   memcpy(icn.asArrayPtr(),bmpBuffer,dwBmpSize);
  29.   GlobalUnlock(hDIB);   
  30.   GlobalFree(hDIB);
  31.   DeleteObject(hBmp);
  32.   ReleaseDC(view);
  33.   DeleteDC(hCompDC);
  34.   return true;
  35. }

回复

使用道具 举报

27

主题

193

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2010-9-15 06:58:02 | 显示全部楼层

这个公式正确吗?否则,在视觉上一切看起来都很好<DWORD dwBmpSize=((bmp.bmWidth*bi.bibibitCount+31)/32)*4*bmp。BMH<编辑:这个公式看起来也不错。如果您能提供更多详细信息,很难从您的描述和代码中看出哪些不起作用。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 01:09 , Processed in 0.287784 second(s), 61 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表