明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: tcsl9621

[图形系统] 转发 完美解决VB.NET窗体中预览DWG图形(附完整代码)

  [复制链接]
发表于 2006-7-28 18:03:00 | 显示全部楼层
haill2000发表于2006-7-18 15:23:00曾经用VC写过一个,需要的可以给我发电邮

传上来大家学习吧!
 楼主| 发表于 2006-8-6 14:24:00 | 显示全部楼层
楼上的说的对,传上来大家学习一下吧。最近有不少人回帖啊。呵……
发表于 2006-8-9 19:21:00 | 显示全部楼层
想问楼主一个问题:使用VB.NET开发CAD会不会有因CAD版本问题而带来的不兼容?比如使用VC++通过ObjectARX开发就会样!VB开发的优点是什么?还有不足呢??我一直再用VBA……
 楼主| 发表于 2006-8-9 20:01:00 | 显示全部楼层
本帖最后由 作者 于 2006-8-24 22:39:51 编辑

VB最好的就是做界面,兼容性是不太好和VC++一样。你要是VBA好就用VBA好了。用什么工具都是一样的。

发表于 2006-8-16 14:37:00 | 显示全部楼层

 改写为C++Builder的编码

 

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int nHandle;
  nHandle = FileOpen("E:\\hnk-s01.dwg",fmOpenRead);
  FileSeek(nHandle,13,0);
  BITMAPFILEHEADER BmpHeader;
  int nPosScen;
  FileRead(nHandle,&nPosScen,sizeof(__int32));

  unsigned short nTypePreview;
  FileSeek(nHandle,nPosScen+30,0);
  FileRead(nHandle,&nTypePreview,1);
  ShowMessage(nTypePreview);
  int nPosBMP;
  int nLenBMP;
  short nBitCount;
  char* pszBuffer;

  TMemoryStream* pms = new TMemoryStream();
  Graphics::TBitmap *pBitmap = new Graphics::TBitmap();

  switch (nTypePreview)
   {
     case 1:
      break;
     case 2:
     case 3:
      FileRead(nHandle, &nPosBMP, sizeof(__int32));
      FileRead(nHandle, &nLenBMP, sizeof(__int32));
      FileSeek(nHandle, nPosBMP+14, 0);
      FileRead(nHandle, &nBitCount,sizeof(__int16));
      //ÒÆÖÁËõÂÔͼBMP¿ªÊ¼Î»ÖÃ
      pszBuffer = new char[nLenBMP+1];
      FileSeek(nHandle, nPosBMP, 0);
      ShowMessage(FileRead(nHandle,pszBuffer,nLenBMP));
      FileClose(nHandle);
      BmpHeader.bfType = 0x4D42;
      if ( nBitCount < 9)
        BmpHeader.bfSize = 54+4*pow(2,nBitCount)+nLenBMP;
      else
        BmpHeader.bfSize = 54+nLenBMP;
      BmpHeader.bfReserved1 = 0;
      BmpHeader.bfReserved2 = 0;
      BmpHeader.bfOffBits = 14+0x28+1024;
      pms->Write(&BmpHeader.bfType, sizeof(BmpHeader.bfType));
      pms->Write(&BmpHeader.bfSize, sizeof(BmpHeader.bfSize));
      pms->Write(&BmpHeader.bfReserved1, sizeof(BmpHeader.bfReserved1));
      pms->Write(&BmpHeader.bfReserved2, sizeof(BmpHeader.bfReserved2));
      pms->Write(&BmpHeader.bfOffBits, sizeof(BmpHeader.bfOffBits));
      pms->Write(pszBuffer,nLenBMP);
      pms->Seek(0,soFromBeginning );

      //pBitmap->LoadFromStream(pms);
      //Image1->icture->Bitmap = pBitmap;

      BitBtn1->Glyph->LoadFromStream(pms);
      break;
   }

}
//---------------------------------------------------------------------------

发表于 2006-8-19 06:58:00 | 显示全部楼层

历害啊,真牛,要是我也这样的水平就好了,太酷了

 

发表于 2006-8-23 13:53:00 | 显示全部楼层

怎么用哦??

哈哈,我是一个文忙!!

发表于 2006-9-6 13:32:00 | 显示全部楼层
发贴心情 
谢谢推荐!
发表于 2007-1-2 11:06:00 | 显示全部楼层
这个格式应该是windows定义的,只是dwg遵从了windows的规范,所有才可以在浏览器里面预览,说了解autocad的文档格式还是距离甚远的....大家明白?我想这段代码也应该可以读取能够在浏览器里面浏览的其他文档的预览的,原理是一致 的
发表于 2007-8-27 17:31:00 | 显示全部楼层
谢谢楼主·但能不能用C#代码的,或是怎么转换?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 04:19 , Processed in 0.182764 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表