实例代码:AcDbDatabase符号表的当前值

执行结果

 

当前图层名称:0

当前线型名称:ByLayer

当前线宽名称:kLnWtByLayer

当前文字样式名称:Standard

当前标注样式名称:ISO-25

当前表格样式名称:Standard

当前多线样式名称:STANDARD

 

源代码:

//—————————————————————————–

//—– acrxEntryPoint.h

//—————————————————————————–

#include “StdAfx.h”

#include “resource.h”

#include “dbtable.h”

//—————————————————————————–

#define szRDS _RXST(“”)

//获取符号表记录的名称

Acad::ErrorStatus GetSymbolName(CString& strName,const AcDbObjectId id)

{

AcDbSymbolTableRecordPointer<AcDbSymbolTableRecord> spRec(id,AcDb::kForRead);

if(Acad::eOk!=spRec.openStatus())

{

return spRec.openStatus();

}

const TCHAR* lpName=NULL;

Acad::ErrorStatus es=spRec->getName(lpName);

if(Acad::eOk!=es)

{

return es;

}

strName=CString(lpName);

return Acad::eOk;

}

Acad::ErrorStatus GetTableStyleName(CString& strName,const AcDbObjectId id)

{

AcDbObjectPointer<AcDbTableStyle> spRec(id,AcDb::kForRead);

if(Acad::eOk!=spRec.openStatus())

{

return spRec.openStatus();

}

TCHAR* lpName=NULL;

Acad::ErrorStatus es=spRec->getName(lpName);

if(Acad::eOk!=es)

{

return es;

}

strName=CString(lpName);

acutDelString(lpName);

return Acad::eOk;

}

Acad::ErrorStatus GetMlineStyleName(CString& strName,const AcDbObjectId id)

{

AcDbObjectPointer<AcDbMlineStyle> spRec(id,AcDb::kForRead);

if(Acad::eOk!=spRec.openStatus())

{

return spRec.openStatus();

}

strName=CString(spRec->name());

return Acad::eOk;

}

 

CString GetLineWeightName(const AcDb::LineWeight lt)

{

switch(lt)

{

case AcDb::kLnWt000:

return _T(“kLnWt000”);

case AcDb::kLnWt005:

return _T(“kLnWt005”);

case AcDb::kLnWt009:

return _T(“kLnWt009”);

case AcDb::kLnWt013:

return _T(“kLnWt013”);

case AcDb::kLnWt015:

return _T(“kLnWt015”);

case AcDb::kLnWt018:

return _T(“kLnWt018”);

case AcDb::kLnWt020:

return _T(“kLnWt020”);

case AcDb::kLnWt025:

return _T(“kLnWt025”);

case AcDb::kLnWt030:

return _T(“kLnWt030”);

case AcDb::kLnWt035:

return _T(“kLnWt035”);

case AcDb::kLnWt040:

return _T(“kLnWt040”);

case AcDb::kLnWt050:

return _T(“kLnWt050”);

case AcDb::kLnWt053:

return _T(“kLnWt053”);

case AcDb::kLnWt060:

return _T(“kLnWt060”);

case AcDb::kLnWt070:

return _T(“kLnWt070”);

case AcDb::kLnWt080:

return _T(“kLnWt080”);

case AcDb::kLnWt090:

return _T(“kLnWt090”);

case AcDb::kLnWt100:

return _T(“kLnWt100”);

case AcDb::kLnWt106:

return _T(“kLnWt106”);

case AcDb::kLnWt120:

return _T(“kLnWt120”);

case AcDb::kLnWt140:

return _T(“kLnWt140”);

case AcDb::kLnWt158:

return _T(“kLnWt158”);

case AcDb::kLnWt200:

return _T(“kLnWt200”);

case AcDb::kLnWt211:

return _T(“kLnWt211”);

case AcDb::kLnWtByLayer:

return _T(“kLnWtByLayer”);

case AcDb::kLnWtByBlock:

return _T(“kLnWtByBlock”);

case AcDb::kLnWtByLwDefault:

return _T(“kLnWtByLwDefault”);

default:

return _T(“未知”);

}

}

void Test()

{

//当前数据库

AcDbDatabase* pDb=acdbHostApplicationServices()->workingDatabase();

if(pDb==NULL)

{

acutPrintf(_T(“\n当前数据库为空\n”));

return;

}

CString strName;

Acad::ErrorStatus es=Acad::eOk;

//图层名称

es=GetSymbolName(strName,pDb->clayer());

if(Acad::eOk!=es)

{

acutPrintf(_T(“\n获取当前图层名称出错:%s\n”),acadErrorStatusText(es));

}

else

{

acutPrintf(_T(“\n当前图层名称:%s\n”),strName);

}

//线型

es=GetSymbolName(strName,pDb->celtype());

if(Acad::eOk!=es)

{

acutPrintf(_T(“\n获取当前线型名称出错:%s\n”),acadErrorStatusText(es));

}

else

{

acutPrintf(_T(“\n当前线型名称:%s\n”),strName);

}

//线宽

AcDb::LineWeight lt=pDb->celweight();

acutPrintf(_T(“\n当前线宽名称:%s\n”),GetLineWeightName(lt));

//文字样式

es=GetSymbolName(strName,pDb->textstyle());

if(Acad::eOk!=es)

{

acutPrintf(_T(“\n获取当前文字样式名称出错:%s\n”),acadErrorStatusText(es));

}

else

{

acutPrintf(_T(“\n当前文字样式名称:%s\n”),strName);

}

//标注样式

es=GetSymbolName(strName,pDb->dimstyle());

if(Acad::eOk!=es)

{

acutPrintf(_T(“\n获取当前标注样式名称出错:%s\n”),acadErrorStatusText(es));

}

else

{

acutPrintf(_T(“\n当前标注样式名称:%s\n”),strName);

}

//表格样式

es=GetTableStyleName(strName,pDb->tablestyle());

if(Acad::eOk!=es)

{

acutPrintf(_T(“\n获取当前表格样式名称出错:%s\n”),acadErrorStatusText(es));

}

else

{

acutPrintf(_T(“\n当前表格样式名称:%s\n”),strName);

}

//多线样式

es=GetMlineStyleName(strName,pDb->cmlstyleID());

if(Acad::eOk!=es)

{

acutPrintf(_T(“\n获取当前多线样式名称出错:%s\n”),acadErrorStatusText(es));

}

else

{

acutPrintf(_T(“\n当前多线样式名称:%s\n”),strName);

}

}

//—————————————————————————–

//—– ObjectARX EntryPoint

class CExample002App : public AcRxArxApp {

 

public:

CExample002App () : AcRxArxApp () {}

 

virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {

// TODO: Load dependencies here

 

// You *must* call On_kInitAppMsg here

AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;

 

//增加命令Test

acedRegCmds->addCommand(_T(“Example002App”),_T(“Test”),_T(“Test”),0,Test);

 

// TODO: Add your initialization code here

 

return (retCode) ;

}

 

virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {

// TODO: Add your code here

 

// You *must* call On_kUnloadAppMsg here

AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;

 

// TODO: Unload dependencies here

//删除命令组

acedRegCmds->removeGroup(_T(“Example002App”));

 

return (retCode) ;

}

 

virtual void RegisterServerComponents () {

}

 

} ;

 

//—————————————————————————–

IMPLEMENT_ARX_ENTRYPOINT(CExample002App)

发表在 ObjectArx | 标签为 , , | 留下评论

C#生成条形码

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

namespace BarCodeCreate

{

public class GBarcodeMgr

{

//起始位

enum Code128StartModes

{

CodeUnset = 0,

CodeA = 103,

CodeB = 104,

CodeC = 105

};

private const string mCode128Stop = “1100011101011”;

/// <summary>

/// 条码编码规则

/// </summary>

List<string> mCode128Encoding = new List<string>();

private void InitEncoding()

{

mCode128Encoding.Add(“11011001100”);

mCode128Encoding.Add(“11001101100”);

mCode128Encoding.Add(“11001100110”);

mCode128Encoding.Add(“10010011000”);

mCode128Encoding.Add(“10010001100”);

mCode128Encoding.Add(“10001001100”);

mCode128Encoding.Add(“10011001000”);

mCode128Encoding.Add(“10011000100”);

mCode128Encoding.Add(“10001100100”);

mCode128Encoding.Add(“11001001000”);

mCode128Encoding.Add(“11001000100”);

mCode128Encoding.Add(“11000100100”);

mCode128Encoding.Add(“10110011100”);

mCode128Encoding.Add(“10011011100”);

mCode128Encoding.Add(“10011001110”);

mCode128Encoding.Add(“10111001100”);

mCode128Encoding.Add(“10011101100”);

mCode128Encoding.Add(“10011100110”);

mCode128Encoding.Add(“11001110010”);

mCode128Encoding.Add(“11001011100”);

mCode128Encoding.Add(“11001001110”);

mCode128Encoding.Add(“11011100100”);

mCode128Encoding.Add(“11001110100”);

mCode128Encoding.Add(“11101101110”);

mCode128Encoding.Add(“11101001100”);

mCode128Encoding.Add(“11100101100”);

mCode128Encoding.Add(“11100100110”);

mCode128Encoding.Add(“11101100100”);

mCode128Encoding.Add(“11100110100”);

mCode128Encoding.Add(“11100110010”);

mCode128Encoding.Add(“11011011000”);

mCode128Encoding.Add(“11011000110”);

mCode128Encoding.Add(“11000110110”);

mCode128Encoding.Add(“10100011000”);

mCode128Encoding.Add(“10001011000”);

mCode128Encoding.Add(“10001000110”);

mCode128Encoding.Add(“10110001000”);

mCode128Encoding.Add(“10001101000”);

mCode128Encoding.Add(“10001100010”);

mCode128Encoding.Add(“11010001000”);

mCode128Encoding.Add(“11000101000”);

mCode128Encoding.Add(“11000100010”);

mCode128Encoding.Add(“10110111000”);

mCode128Encoding.Add(“10110001110”);

mCode128Encoding.Add(“10001101110”);

mCode128Encoding.Add(“10111011000”);

mCode128Encoding.Add(“10111000110”);

mCode128Encoding.Add(“10001110110”);

mCode128Encoding.Add(“11101110110”);

mCode128Encoding.Add(“11010001110”);

mCode128Encoding.Add(“11000101110”);

mCode128Encoding.Add(“11011101000”);

mCode128Encoding.Add(“11011100010”);

mCode128Encoding.Add(“11011101110”);

mCode128Encoding.Add(“11101011000”);

mCode128Encoding.Add(“11101000110”);

mCode128Encoding.Add(“11100010110”);

mCode128Encoding.Add(“11101101000”);

mCode128Encoding.Add(“11101100010”);

mCode128Encoding.Add(“11100011010”);

mCode128Encoding.Add(“11101111010”);

mCode128Encoding.Add(“11001000010”);

mCode128Encoding.Add(“11110001010”);

mCode128Encoding.Add(“10100110000”);

mCode128Encoding.Add(“10100001100”);

mCode128Encoding.Add(“10010110000”);

mCode128Encoding.Add(“10010000110”);

mCode128Encoding.Add(“10000101100”);

mCode128Encoding.Add(“10000100110”);

mCode128Encoding.Add(“10110010000”);

mCode128Encoding.Add(“10110000100”);

mCode128Encoding.Add(“10011010000”);

mCode128Encoding.Add(“10011000010”);

mCode128Encoding.Add(“10000110100”);

mCode128Encoding.Add(“10000110010”);

mCode128Encoding.Add(“11000010010”);

mCode128Encoding.Add(“11001010000”);

mCode128Encoding.Add(“1110111010”);

mCode128Encoding.Add(“1000010100”);

mCode128Encoding.Add(“0001111010”);

mCode128Encoding.Add(“10100111100”);

mCode128Encoding.Add(“10010111100”);

mCode128Encoding.Add(“10010011110”);

mCode128Encoding.Add(“10111100100”);

mCode128Encoding.Add(“10011110100”);

mCode128Encoding.Add(“10011110010”);

mCode128Encoding.Add(“11110100100”);

mCode128Encoding.Add(“11110010100”);

mCode128Encoding.Add(“11110010010”);

mCode128Encoding.Add(“11011011110”);

mCode128Encoding.Add(“11011110110”);

mCode128Encoding.Add(“11110110110”);

mCode128Encoding.Add(“10101111000”);

mCode128Encoding.Add(“10100011110”);

mCode128Encoding.Add(“10001011110”);

mCode128Encoding.Add(“10111101000”);

mCode128Encoding.Add(“10111100010”);

mCode128Encoding.Add(“11110101000”);

mCode128Encoding.Add(“11110100010”);

mCode128Encoding.Add(“10111011110”);

mCode128Encoding.Add(“10111101110”);

mCode128Encoding.Add(“11101011110”);

mCode128Encoding.Add(“11110101110”);

mCode128Encoding.Add(“11010000100”);

mCode128Encoding.Add(“11010010000”);

mCode128Encoding.Add(“11010011100”);

}

public GBarcodeMgr()

{

InitEncoding();

}

private string _OriginCode = “”;

/// <summary>

/// 条码原始内容

/// </summary>

public string OriginCode

{

get

{

return _OriginCode;

}

set

{

_OriginCode = value;

}

}

public Bitmap Create(int nHeight)

{

string encode = GetBarcodeContents();

int len = encode.Length;

int nWidth = len;

Bitmap b = new Bitmap((int)(1*nWidth+2), nHeight);

Graphics g = Graphics.FromImage(b);

g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0,0,b.Width-1,b.Height-1));

 

Pen p = new Pen(Color.Black,1F);

int nBarcodeHeight = (int)(nHeight * 0.71);

int nTextHeight = nHeight – nBarcodeHeight;

Brush brush=new SolidBrush(Color.Black);

for (int i = 0; i < len; i++)

{

if (encode[i] == ‘1’)

{

g.FillRectangle(brush, new RectangleF((float)(1*i + 1), 0F, 1F, (float)(nBarcodeHeight – 1)));

}

}

string code = Encoding.ASCII.GetString(Encoding.Convert(Encoding.Default, Encoding.ASCII, Encoding.Default.GetBytes(_OriginCode)));

len = code.Length;

Font f=new Font(“微软雅黑”,(float)(nTextHeight*0.45));

 

for (int i = 0; i < len; i++)

{

char c = code[i];

string s=””;

s+=c;

RectangleF rf=new RectangleF((float)(i*nWidth/len),(float)(nBarcodeHeight-1+1),(float)(nWidth/len),(float)(nTextHeight*0.9));

g.DrawString(s, f, brush, rf);

}

return b;

}

//条码编码后的内容

string GetBarcodeContents()

{

//转换成ASCII

string code = Encoding.ASCII.GetString(Encoding.Convert(Encoding.Default, Encoding.ASCII, Encoding.Default.GetBytes(_OriginCode)));

List<int> codeDigit = new List<int>();

codeDigit.Add((int)Code128StartModes.CodeB);

int checkDigit = (int)Code128StartModes.CodeB;

int len = code.Length;

for (int i = 0; i < len; i++)

{

int tmp = (int)code[i];

int digit = tmp – 32;

codeDigit.Add(digit);

checkDigit += digit * (i + 1);

}

codeDigit.Add(checkDigit % 103);

 

string code128 = “”;

len = codeDigit.Count;

for (int i = 0; i < len; i++)

{

int index = codeDigit[i];

code128 += mCode128Encoding[index];

}

 

code128 += mCode128Stop;

return code128;

}

}

}

 

 

//调用代码

GBarcodeMgr mgr = new GBarcodeMgr();

mgr.OriginCode = textBox1.Text;

Bitmap b=mgr.Create(60);

b.Save(@”D:\Barcode.bmp”,ImageFormat.Bmp);

//效果

 

发表在 C# | 标签为 | 留下评论

用VC向Word中插入图片的方法

VC++6.0向Word文件的指定位置上插入一张图片,需要用到nlineShapes类型的AddPicture方法。

在MSDN中,该方法的声明如下:

**************************************************************************

在文档中添加一幅图片。返回一个 Shape 对象,该对象代表图片,并将其添加至 InlineShapes 集合。

expression.AddPicture(FileName, LinkToFile, SaveWithDocument, Range) expression      必需。该表达式返回一个 InlineShapes 对象。

FileName     String 类型,必需。图片的路径和文件名。

LinkToFile     Variant 类型,可选。如果为 True,则将图片链接到创建该对象的文件;如果为 False,则将图片作为该文件的独立副本。默认值是 False。

SaveWithDocument     Variant 类型,可选。如果为 True,则将链接的图片与文档一起保存。默认值是 False。

Range     Variant 类型,可选。图片置于文本中的位置。如果该区域未折叠,那么图片将覆盖此区域,否则插入图片。如果忽略此参数,则自动放置图片

**************************************************************************

 

根据该说明的定义,第四个参数Range是用来设置图片位于文本中的位置的。因此,我们可以利用该参数向某一指定位置插入图片。具体方法如下:

 

Selection sel=m_app.GetSelection();//获取文档的selection InlineShapes inlineshapes = sel.GetInlineShapes(); inlineshapes.AddPicture(“D:\\cjdz.bmp”,COleVariant((short)FALSE),COleVariant((short)TRUE),&_variant_t(sel.GetRange()));//添加图片,并制定其位置为当前光标位置 inlineshapes.ReleaseDispatch(); sel.ReleaseDispatch();

注意上面第四个参数的转换方法,用到了_variant_t变量,使用此种方法可以将LPDISPATCH转换成VARIANT*类型

 

如此就可将图片直接插入到光标当前所在位置

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/halin1983/archive/2009/09/08/4533112.aspx

发表在 C++ | 标签为 , | 留下评论

小网站广告投放策略技巧

转载:http://www.admaimai.com/News/Detail/2/54172.htm

在网站日益增多的今天,网络营销已经成为了一个新兴的行业,而在任何一个整合网络营销策略中都不会缺少广告策略,无论是大网站还是小网站,广告策略都不可缺少,下面就为大家阐述一下小网站广告的投放策略。

1、广告模式的选择。如果想立即见效的话那么百度关键词推广、谷歌广告联盟会比较适合。如果是为了口碑,那么选择地方型或大型的门户站比较合适。

2、在渠道合作上,尽管采用流量合作的方式,可以让企业的风险处于最低,但如果不加选择的跟任何小网站都来一番合作,不仅浪费公司资源,也会在小网站经营者之间形成不好的口碑,显然,企业并不能给任何类型的小网站带来收益。

3、在跟小网站合作的时候,企业尽量选择那些与产品相关的网站,一定要避免随意性。比如,在一个内容为教站站长如何去赚钱的页面,加入学车的cps链接,那么这样的链接,多班不会有人点击,效果当然好不起来的。原因在与,网页的内容是定位在站长上面,而cps链接确实学车者,只要想想,访问这个页面的站长当中,许多站长已经有了车了,当然就不需要去学开车了。但如果在这个页面上,方式一个如何帮助站长赚钱的cps链接,比如说,某个联盟收入比较搞,那么,几乎可以肯定,每个浏览这个页面的站长,都会点击这个链接,相对放学开车的链接来说,流量的转化率就会很多。

4、与小网站合作,也要本着内容为王的原则。那些原创内容多的网站,应该是企业首选的合作网站。这样的网站,因为内容具有权威性,更新快,容易备搜索引擎收录,网站流量必然会随着时间的推移而逐渐增大。对企业来说,这样的小网站也最具备合作潜力。

5、相反地,那些靠推广带流量的小站,或许一开始流量还不错,但因为内容不能及时更新,在推广结束之后,流量就会呈现下滑的趋势。有这样一些小网站,他们为了达到与企业合作的目的,在初期不断花钱来做推广,确实能带来了一定的流量。不过,因为没投入经历去做内容,长期来看,流量会越来越少,最终会淡入搜索引擎的排行榜。所以,跟这类的小站合作,企业要谨慎对待。

从上面的这些技巧看来,跟小网站合作,企业也要精挑细选,提出那些资质不佳、条件不符的,挑选那些目标人群搞度重合的网站。这样才能使自己的企业更上一层楼。

发表在 网站建设 | 留下评论

ObjectArx二次开发必备虚拟机

做CAD二次开发的特别头疼的就是开发环境问题,不管是CAD还是ObjectArx还是VS都要装好多版本。

重装起来也一样的特别麻烦。

每次想想头都大了。

为此专门做了一个虚拟机,希望能给大家提供便利。

一共40G,分为8个部分。

http://yun.baidu.com/share/link?shareid=1185768365&uk=721859502

http://yun.baidu.com/share/link?shareid=1184246828&uk=721859502

http://yun.baidu.com/share/link?shareid=1185172600&uk=721859502

http://yun.baidu.com/share/link?shareid=1755031517&uk=721859502

http://yun.baidu.com/share/link?shareid=1754281488&uk=721859502

http://yun.baidu.com/share/link?shareid=625535473&uk=721859502

http://yun.baidu.com/share/link?shareid=626096144&uk=721859502

http://yun.baidu.com/share/link?shareid=1186284790&uk=721859502

登录用户名为:Aministrator

登录密码为:123456

虚拟机版本为:VMware® Workstation 10.0.1 build-1379776

操作系统版本为:Microsoft Windows Sever 2003

安装的CAD有:AutoCAD2004,AutoCAD206,AutoCAD2007,AutoCAD2008,AutoCD2010,AutoCAd2013

安装的VS有,V2002,VS2005,VS2008,VS2010

安装的ObjectArx有ObjectArx2004,ObjectArx2005,ObjectArx2007,ObjectArx2010,ObjectArx2013

可满足CAD2004~CAD2014二次开发需求。

发表在 ObjectArx | 留下评论

为什么要学ARX

其实在很多情况下你并不一定要学ARX。如果想从事AutoCAD二次开发,LISP及VB(VBA)就是很好的选择。话虽如此,ARX还是有其优点。

 

在很多书上,总是要对各种开发语言做比较,对于ARX,每一本书上都有一个让我哭笑不得的评价,就是说”ARX的程序容易造成死机”,天啦,这就是ARX的唯一缺点?是的,相对LISP和VB(甚至DELPHI等)其它语言而言,确实ARX是无可挑剔的。然而说”ARX的程序容易造成死机”我是永远都不会承认的,真正掌握了ARX的人是不会说这话的。ARX说到底就是VC,就是面向对象,就是类。其实ARX的程序是最不易死机的。

 

还是AutoCADR12的时候我就选用ADS做开发,当时是在DOS下的,为了不造成死机,不得不在编译的时候对内存进行跟踪,如果从程序启动到中间做了各种操作,最后关闭程序后,发现内存没有泄漏,那么就不会造成死机了。特别是使用链表的时候,内存处理是要有耐心的。但是到了R2000,由于在VC6.0的环境下进行开发,只要有C++的常识,已经是不用进行任何的内存管理了,容易死机之说在我看来是从来都不成立的。

由于ARX要经过严格的编译,在试运行的时候如果有问题是真会出问题的,但是只要试运行通过了,以后也就很稳定了,根本就不会造成系统崩溃。

 

在很多情况下可以用LISP做开发,可以用VBA做开发,然而在有两种情况是不合适的。一种是速度要求很高时、另一种是做高档的软件时。比如说最近有人做分形理论仿真,用VBA,结果速度慢得要命,还有人做SQL数据库接口,用VBA,速度也是不能承受。

 

假设有以下一个项目:你的老板要你把SQL数据库、ACCESS数据库同AutoCAD联系起来,很多设计参数要能从数据库里自动查找,设计结果要能在PDM软件上自动流览,(做一个AutoCAD与PDM的接口),很多情况下不许运行AutoCAD软件本身,(因为AutoCAD软件只买了有限的几套不能人人都装的),你打算用什么来做呢?

 

这样的项目当然也是能用VB做的,然而不可否认,用ARX最好。特别是,随着社会的进步,AutoCAD本身不适用了,有一天老板要你把以前的二次开发的软件移植到Think3(一套高档的三维CAD软件)上,那又怎么办呢?在VC下的ARX显然更具有可移植性,如果你写程序时就留有一手的话。

 

LISP本身有很多局限,速度也是有限的,很多书上都这么说,大家也承认。可是对VBA,就不太有人明白了。VBA是VB的应用程序接口,在WORD\EXCELL里也有,AutoCAD的VBA接口使用相同的原理。在Microsoft应用程序中,所有的VBA接口都是通过Idispatch::Invoke进行数据交换的,所有的数据都用VARIANT来转换,而一次这样的调用要花掉0.5ms,Microsoft公司已经意识到了这一点,又推出了一种双接口的变种接口用来提高VBA的速度,但是至少在VC6.0中还没有支持这种接口,显然AutoCAD2000中也不会有支持。

 

说了这么多,结论是什么呢?如果只是因为爱好,为了更好地使用AutoCAD,或者给AutoCAD做定制,而且你又没掌握C语言,最好是学VBA或LISP,因为易学且足够。如果你志存高远,随时想淘汰AutoCAD或站在管理的角度也站在PDM的角度处理问题而不是局限于设计本身,而且还想做出优质的产品来,最好还是学ARX。我想如果一个程序员掌握了一定的机械设计知识,一定的数据库知识,一定的管理知识,再同VC\OpenGL\DirectX等技术结合起来处理问题,这个人的力量是无穷的,AutoCAD软件本身也会被你早早地扔到垃圾堆里。

使用ARX做CAD二次开发呢,优势很明显,和CAD共享内存,运行速度非常快,使用C++开发,安全性有保证,不用担心被别人破解,反编译。

缺点也是同样的明显,基本上CAD每更新一个大版本,你软件就得重新编译一下,需要持续的人力投入。

发表在 ObjectArx | 留下评论

win7安全模式下运行Office2010,Offic2013的通用方法

win7安全模式下运行Office2010,Office2013的通用方法

原因:

系统服务中增加了一个“Office 软件保护平台“(SPP)服务,用来管理 Office 2010,Office 2013 的激活

解决办法:

运行regedit打开注册表编辑器,浏览到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal 这个位置,这下面列出的就是安全模式下可以加载的所有服务和驱动程序了。右键单击Minimal新建一个注册表项,名称改为SPP服务的名称“osppsvc”(见第二幅图中的“服务名称“),再在右边窗格中把这个项的默认值改为“Service”。

Windows 还有一个“网络安全模式“,如果希望在这个模式下启动某个服务,则需要在 SafeBoot\Network

这个位置添加服务名称,而不是 Minimal。

为了方便大家,直接做了注册表文件,大家下载后导入就可以了。

Office Safe Mode Reg

也可以新建一个.reg文件写入下面的内容,然后导入注册表。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\osppsvc] @=”Service”

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\osppsvc] @=”Service”

 

 

 

发表在 其它 | 标签为 , , | 留下评论

CBitmapEx—免费的C++位图操作类

原文出处:http://www.codeproject.com/KB/graphics/CBitmapEx.aspx

译文来源:http://blog.csdn.net/clever101

 

 

简介:

 

这篇文章介绍了一个叫CBitmapEx的简单的C++位图操作类。很多次我面对这样一个事实:MFC库只能提供一个只带有有限特征的C++位图操作类CBitmap。我需要诸如比例尺、旋转角度、应用不同滤波等等特征,但是CBitmap并不具有。另一个类CDC (设备上下文)提供了诸如拉伸度、透明性和透明混色等更多的选项,但它运行得太慢(被很多人很多次所证实)。

 

所以,我决定去写另一个(是的,另一个)不依赖MFC的位图操作类,并且提供一些目前在原来MFC没有实现的特性。这个类能加载任何8位、16位、24位和32位的位图,但在里面是和32位位图运行的。能够将结果图像保存24位位图到硬盘,或者它能够在设备上下文中画出位图。

 

背景

 

    在Code Project有很多文章讨论过这个话题,所以你可以随意翻阅它们并将它们的最终结果和我的实现作比较。

 

代码用法

   使用这个类非常简单,请看下面:

  1. #include “BitmapEx.h”
  2. // 装载位图
  3. CBitmapEx bitmapEx;
  4. bitmapEx.Load(_T(“Enter bitmap source file path here…”));
  5. // Do whatever you need to do here
  6. bitmapEx.Rotate(45);
  7. bitmapEx.Sepia();
  8. bitmapEx.Scale(50, 50);
  9. // 在屏幕上绘制位图(首先在别的地方得到设备句柄)
  10. bitmapEx.Draw(hDC);
  11. // 保存位图
  12. bitmapEx.Save(_T(“Enter bitmap destination file path here…”));

 

这儿有很多的公共的方法。请看下面:

 

创建位图/加载位图/保存位图

你能使用这个类去加载磁盘或者内存字节流上任何8位到32位的位图。这个类将把它转化为内部的32位位图。之后进行保存操作,位图将被再次转化为24位位图并且被保存在磁盘或内存。你能通过提供的方法来创建空白位图。

 

使用如下方法,可以在磁盘或内存中创建、加载和保存位图:

  1. void Create(long width, long height);
  2. void Create(CBitmapEx& bitmapEx);
  3. void Load(LPTSTR lpszBitmapFile);
  4. void Load(LPBYTE lpBitmapData);
  5. void Save(LPTSTR lpszBitmapFile);
  6. void Save(LPBYTE lpBitmapData);

 

一般的变换方法

   这个类提供了一些诸如缩放、旋转和镜像等一般的变换方法。在缩放和旋转操作中位图的细节信息将会掉失,所以实现了三种插值方法:

最近邻插值(插值速度最快,无修改信息,图像质量低)

双线性插值法(插值速度快,图像质量较好)

三次B样条(插值速度慢,图像质量最好)

你可以使用SetResampleMode()函数来确定使用哪种插值方法。下面是变换方法列表:

  1. void Scale(long horizontalPercent=100, long verticalPercent=100);
  2. void Rotate(long degrees=0, _PIXEL bgColor=_RGB(0,0,0));
  3. void FlipHorizontal();
  4. void FlipVertical();
  5. void MirrorLeft();
  6. void MirrorRight();
  7. void MirrorTop();
  8. void MirrorBottom();

 

你可以围绕x轴或y轴进行缩放位图,从0度到360度进行旋转位图,或者对位图进行倒立和镜像。当你对位图进行倒立或镜像,不要求你指定插值方式因为你没有改变位图尺寸。

当你旋转位图时你可以设置背景颜色,默认背景颜色是黑色。

简单的位图过滤

这儿实现了6种简单的滤波方法(将来会实现更多)来做一个简单的位图卷积过滤。Clear()方法可以使用你指定的颜色来填充位图。

 

  1. void Clear(_PIXEL clearColor=_RGB(0,0,0));
  2. void Negative();
  3. void Grayscale();
  4. void Sepia(long depth=34);
  5. void Emboss();
  6. void Engrave();
  7. void Pixelize(long size=4);

    

对一些滤波,比如Sepia()Pixelize()你可以通过改变输入参数来得到不同的输出结果。

绘制位图

   下面是CBitmapEx类的核心函数列表:

  1. void Draw(HDC hDC);
  2. void Draw(HDC hDC, long dstX, long dstY);
  3. void Draw(long dstX, long dstY, long width, long height, CBitmapEx& bitmapEx,
  4.     long srcX, long srcY);
  5. void Draw(long dstX, long dstY, long width, long height, CBitmapEx& bitmapEx,
  6.     long srcX, long srcY, long alpha);
  7. void Draw(long dstX, long dstY, long dstWidth, long dstHeight, CBitmapEx& bitmapEx,
  8.     long srcX, long srcY, long srcWidth, long srcHeight);
  9. void Draw(long dstX, long dstY, long dstWidth, long dstHeight, CBitmapEx& bitmapEx,
  10.     long srcX, long srcY, long srcWidth, long srcHeight, long alpha);
  11. void Draw(_QUAD dstQuad, CBitmapEx& bitmapEx);
  12. void Draw(_QUAD dstQuad, CBitmapEx& bitmapEx, long alpha);
  13. void Draw(_QUAD dstQuad, CBitmapEx& bitmapEx, long srcX, long srcY, long srcWidth,
  14.     long srcHeight);
  15. void Draw(_QUAD dstQuad, CBitmapEx& bitmapEx, long srcX, long srcY, long srcWidth,
  16.     long srcHeight, long alpha);
  17. void DrawTransparent(long dstX, long dstY, long width, long height, CBitmapEx& bitmapEx,
  18.     long srcX, long srcY, _PIXEL transparentColor=_RGB(0,0,0));
  19. void DrawTransparent(long dstX, long dstY, long width, long height, CBitmapEx& bitmapEx,
  20.     long srcX, long srcY, long alpha, _PIXEL transparentColor=_RGB(0,0,0));
  21. void DrawTransparent(long dstX, long dstY, long dstWidth, long dstHeight,
  22.     CBitmapEx& bitmapEx, long srcX, long srcY, long srcWidth, long srcHeight,
  23.     _PIXEL transparentColor=_RGB(0,0,0));
  24. void DrawTransparent(long dstX, long dstY, long dstWidth, long dstHeight,
  25.     CBitmapEx& bitmapEx, long srcX, long srcY, long srcWidth, long srcHeight,
  26.     long alpha, _PIXEL transparentColor=_RGB(0,0,0));
  27. void DrawTransparent(_QUAD dstQuad, CBitmapEx& bitmapEx,
  28.     _PIXEL transparentColor=_RGB(0,0,0));
  29. void DrawTransparent(_QUAD dstQuad, CBitmapEx& bitmapEx, long alpha,
  30.     _PIXEL transparentColor=_RGB(0,0,0));
  31. void DrawTransparent(_QUAD dstQuad, CBitmapEx& bitmapEx, long srcX, long srcY,
  32.     long srcWidth, long srcHeight, _PIXEL transparentColor=_RGB(0,0,0));
  33. void DrawTransparent(_QUAD dstQuad, CBitmapEx& bitmapEx, long srcX, long srcY,
  34.     long srcWidth, long srcHeight, long alpha, _PIXEL transparentColor=_RGB(0,0,0));
  35. void DrawBlended(long dstX, long dstY, long width, long height, CBitmapEx& bitmapEx,
  36.     long srcX, long srcY, long startAlpha, long endAlpha, DWORD mode=GM_NONE);
  37. void DrawBlended(long dstX, long dstY, long dstWidth, long dstHeight,
  38.     CBitmapEx& bitmapEx, long srcX, long srcY, long srcWidth, long srcHeight,
  39.     long startAlpha, long endAlpha, DWORD mode=GM_NONE);

 

你可以看到这儿有很多不同的位图绘制方法。指定原尺寸和目标尺寸能够以不同的比例显示位图。最终的图像质量和显示速度取决你选择的插值方法。在大多数的情况下,双线性插值法是平衡显示速度和图像质量的一种比较好的方法。它类似于GDIStretchBlt()函数。

     除了一般的显示方法,这儿还有特别的显示方法。使用Draw()函数通过设置_QUAD参数你可以在你指定的四个角顶点的多边形绘制位图。它类似于GDIPlgBlt()函数,只是它提供了更多的自由,那就是,它能做投影变化同时不仅仅是仿射位图变换。一些人将会发现这个非常有用。

另一组可用的位图绘制方法是DrawTransparent()函数组。它所能做就是:它能在原位图中指定一种透明颜色。另外,它能显示位图的投影变化。

所有的位图绘制函数能够提供一个不透明性参数只要它在绘制操作中能被应用。这个类似于使用GDIAlphaBlend()函数。

     通过结合不同的位图绘制方法,能够出现一些很酷的显示效果。

    为了使用前面两种函数在屏幕上显示位图或者其它设备环境,需要一个设备句柄作为输入参数。

位图信息函数

下面是一些可用的获取位图信息的函数:

 

  1. LPBITMAPFILEHEADER GetFileInfo() {return &m_bfh;}
  2. LPBITMAPINFOHEADER GetInfo() {return &m_bih;}
  3. long GetWidth() {return m_bih.biWidth;}
  4. long GetHeight() {return m_bih.biHeight;}
  5. long GetPitch() {return m_iPitch;}
  6. long GetBpp() {return m_iBpp;}
  7. long GetPaletteEntries() {return m_iPaletteEntries;}
  8. LPRGBQUAD GetPalette() {return m_lpPalette;}
  9. DWORD GetSize() {return m_dwSize;}
  10. LPBYTE GetData() {return m_lpData;}
  11. void SetResampleMode(RESAMPLE_MODE mode=RM_NEARESTNEIGHBOUR) {m_ResampleMode = mode;}
  12. RESAMPLE_MODE GetResampleMode() {return m_ResampleMode;}
  13. BOOL IsValid() {return (m_lpData != NULL);}

 

直接的像素访问函数

     这方面也提供了一些重要的函数,请看下面:

 

  1. _PIXEL GetPixel(long x, long y);
  2. void SetPixel(long x, long y, _PIXEL pixel);

    

这些方法然而比一般的直接内存访问要慢。你可以通过使用GetData()成员函数来得到位图内存缓冲。使用这个位图内存缓冲你能做任何你设想为位图实时处理。对有测试性质的意图这种方法比直接的像素访问要安全。

使用CBitmapEx类的注意事项:

     使用所有这些方法你能做任何类型你需要的绘制和变换。对,几乎是所有。而且更多的滤波将被添加进来,更多的变换将得到应用。

还有,读者的评论对于源码更新非常有用。新的函数,比如从内存流中加载和保存已经添加,同时添加的函数还有通过插入点在客户设备绘制位图。

原来许多的绘制函数现在已改由内置的汇编函数实现来获取更高的速度。源码已经添加注释以助于更好的理解。所有关于汇编程序的优化都是欢迎的(因为我并非这方面的专家)。

关于示例工程

     工程中的CEffectorBuilder类是一个特别的类,仅仅是作为一个示例去创建动画。这个类使用CBitmapEx类去加载位图文件并对它们作各种变换。上面的截图显示示例工程的屏幕输出。这儿有很多可用绘制和变换的效果你可以自由去体验。最终结果看起来很好!

有趣的地方

     使用这个类我已经很多次发现一种完美的图形加速方法。它就是使用固定点运算。它被应用于CBitmapEx类的每个角落,几乎在每个单独的浮点乘法和除法。所以,不要对你仅仅使用这个类就能取得实时的动画速度感到惊奇。看看使用CBitmapEx类的示例工程所取得的实时动画速度。

授权

这篇文章,包括任何源码和文件,遵循The Code Project Open License (CPOL)协议。

作者简介

     darkoman是塞尔维亚的Nis电子工程学院的一个计算机硕士,从2001年开始使用C++/C#在Windows平台进行应用程序开发。他爱好旅游、阅读、结识新的朋友和学习不同的文化。

职业:软件开发工程师(塞尔维亚)

国籍:塞尔维亚

发表在 C++ | 标签为 , | 留下评论

免费的WORD转PDF工具,支持命令行模式

WORD转PDF挺简单的,只需要安装一下Microsoft开发的专门插件就可以了。

http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en

安装完之后office系列所有软件都会在“另存为”下出现“PDF或XPS”选项,点那个,然后存成PDF就可以了。
格式非常完美,没有水印没有广告,免费,绝无兼容问题。

但是做一些应用开发的时候需要在后台用命令行将WORD文件转换为PDF文件。

这就需要使用工具了。

经过几天的网上查找,终于找到了一款效果很好,而且免费的工具,难能可贵的是还支持命令行模式。

http://www.weenysoft.com/free-word-to-pdf-converter.html

引文版的,大致翻译了一下。

支持 doc, docx, rtf, txt and htm 等格式的文件一次性转换成pdf文件

可以自己增加水印和密码到输出的pdf文件中

不支持DRM保护的文件(不太理解)

不需要安装Microsoft Office和Adobe Acrobat Reader ,不安装任何驱动。

支持Windows XP, Windows Vista, Windows 7 and Windows 8, 支持 32位操作系统和64位操作系统。

Free to use – 100% free to download, install and use, no extra fee.

完全免费使用(下载,安装,使用)

Command line program is available.

允许使用命令行模式

Support account without administrator right.

不需要管理员权限。

Command Line Command Line Details
/? List all command line options.
/v Show Free Word to PDF Converter version and copyright information.
/source <Filename> <Filename> <Filename> Select source Word files. Separate filename with blank. The file format can be DOCX, DOC, RTF, TXT, HTM or HTML.         For example: word2pdf.exe /source “c:\test\sample1.docx” “c:\test\sample2.docx” “c:\test\sample3.docx”
/target <Directoryname> Set target directory. The default target directory is “c:\My PDF”.         For example: word2pdf.exe /target “c:\My PDF”

 

Sample: the command below will convert three word files sample1.docx, sample2.docx and sample3.docx to PDF files in directory “c:\My PDF”.

word2pdf.exe /source “c:\test\sample1.docx” “c:\test\sample2.docx” “c:\test\sample3.docx” /target “c:\My PDF”

 

看了以上介绍,是不是觉得挺好的一个工具,可以满足自己的需求,那么赶快去下载吧。

http://www.weenysoft.com/free-word-to-pdf-converter.html

发表在 实用软件 | 标签为 , | 留下评论

[转载]程序员真正的价值

转载:http://chijianqiang.baijia.baidu.com/article/36017

问:池老师,我是个不爱互动的人,但是您所有的文章我都看了,非常感谢您的引导,我入手了人生第一台 MBP。现在问题来了,但是找不到更合适的人解答,只能求助于您了,如果您有时间的话。问题是这样的:我有个32bit unix file(开启一个服务进程),在 Mac 上执行时错误提示是:exec format error,但是在 Linux 服务器却可以执行,为何?Mac 上有可以运行的方案吗?期待您的回复,不胜感激。

答:Linux 和 OS X 是不同的操作系统,可以尝试在 OS X 里重新编译这个文件。

问:非常感谢!如果没有文件源码是不是就只能认命了?

答:可以在 Mac 上装 Docker,然后对服务进行端口映射就可以了。

答:茅塞顿开。谢池老师。

以上是我和一位读者的对话,这位小伙子在拿到答案之后像一缕烟尘一样消失无踪,之后再也没有出现过。

在微信上加了很多 MacTalk 的读者之后,经常会收到一些奇奇怪怪的问题,关于职场、关于选择、关于朋友、关于 Mac、关于技术等等,不一而足。但是我能回答的却很少。问题不好没法回答,问题太复杂没法回答,问题领域超出我的认知也没法回答,耗时太长的问题我也没时间回答,实在是惭愧的紧。好在偶尔也能够帮助一些小伙伴解决一些实际问题,心理上略感安慰,比如上面这个问题。

把这段程序员之间的对话翻译一下,大致是这么个故事:

一位读者有一个32位的 Unix 可执行文件,可以在某种版本的 Linux 服务器上正常运行,运行这个文件作用就是起个进程,开端口,然后与其他程序进行交互。但是这个文件拿到 Mac 上完全没办法运行。就在他趴在 Mac 上愁肠百结万念俱灰的时候,突然想到了「池老师」。不就是这个老家伙把 Mac 夸的像一朵玫瑰一样,让每个程序员都去采摘么?现在扎手了,你不管谁管?于是他给我发来消息,意思就是管也得管,不管也得管,您看着办。

我拿到问题一看,不难。Linux 和 OS X 虽然师出同门,都是从老前辈 Unix 那儿毕业的,但是后来毕竟各练各的,在 Linux 编译好的程序不可能在 OS X 上用,但是在 OS X 上重新编译一下可能就没事了。我把这个想法告诉了这位程序员,得到的反馈是:对不起哥,没有源代码!

我被这个冷酷的回复震惊了,立刻意识到刚才的想法并不是最优解决方案,因为在重新编译的过程中,各种包的依赖关系和编译错误足以让你焦头烂额,我随即提供了 B 计划:在 OS X 上安装 Docker,轻量级的容器 Docker 可以运行各种版本的 Linux,把文件扔到 Docker 里,然后通过主机和 Docker 之间的端口映射即可轻松解决这一问题。

虽然这里面会涉及很多技术细节,但是方向是没有问题的,所以这位程序员立刻表示「茅塞顿开」,然后「biu 」的一声就在屏幕对面消失了,没有留给我说「不客气」的机会。

这个问题装个 Linux 虚拟机也可以解决,但是虚拟机过于耗费资源,而且不如 Docker 灵活,所以不是最佳解决方案。Docker 是。

做为一个程序员,我们除了要掌握多门程序语言和多种数据库,了解前端技术、后端技术,通晓网络七层架构,知道 TCP/IP三次握手和四次挥手,编写漂亮的代码,设计优美的架构……之外,我们还要解决研发、程序运行和产品上线过程中遇到的各种问题,而且被要求以最小的代价来解决问题……我们容易吗?

除了编程技巧和程序设计能力,解决问题的稳准狠是衡量一个程序员是否优秀的重要因素之一,也是资深技术人员真正的价值所在。在科技浪潮澎湃、技术信息扑面而来的今天,一位刚毕业的大学生如果足够勤奋,他可以在两三个月之内掌握一门编程语言,并编写出像模像样的软件,他们的学习速度甚至超过了我们这些老程序员,但是解决问题的能力是无法速成的,只能依靠时间、经验和惨痛的教训历练而成。有时候还需要灵感和运气。

很多军迷读了大量的军事著作和历史小说,常常羡慕那些名将的风采,并浩叹自己「生不逢时」。但是名将不是那么容易炼成的。历史上叱诧风云的名将凤毛麟角,他们亲自持刀上阵追击敌人,见识战场的惨烈,目睹敌人的尸体,看到战友被杀,知道被刀看中会流血死去,他们冷酷无情,坚如磐石,在全军即将崩溃的时候发现敌人的弱点并进行攻击,在瞬息万变的战场进行决断,在多次失败后从无数士兵的尸体里站起来重新出发去挑战那个战胜你的对手,在所有人对你说「指导员,我们上吧」的时候,坚定的说出那三个字:再等等!

如果你做不到这些,那还是做个最终会被张飞枪挑的小兵吧。

优秀的程序员同样如此,菜鸟常常羡慕高手在谈笑之间让难题灰飞烟灭,而自己却苦苦思索而不得入门之法,殊不知这些高手同样经历了名将的那些腥风血雨。他们在清晨的微光里编写代码,在轰鸣的机房中调试程序,他们彻夜不眠就是为了解决一个 bug,他们要承受数据丢失或上线失败的痛苦,默默吞下眼泪,准备下一次的战斗。不停的学习、实践和思索,成千上万个小时之后,高手始成。

同样的问题,高手的解决思路和小球是截然不同的。一般来说,只要不是世界难题,给足时间、空间和人力,都能解决。如果你遇到问题告诉上级,这个问题交给我了,两年之内搞的妥妥哒,那就不要怪项目组组团把你打出翔来,因为大家要的是分分钟解决,不是两年。在这个唯快不破的年代,我们没有这么多的时间,所以要通过逆向思维、经验教训、辗转腾挪、借力打力等方式以最小的代价快速解决问题。这才是老程序员的价值。

再举个例子,一个运行良好的线上应用在你修改 bug 增加功能之后重新上线出现了一些莫名其妙的问题,比如占用资源增加或运行一段时间宕机等等,怎么解决?

常规的做法就是通过阅读日志、模拟线上环境和调试程序来定位错误。容易的 bug 用这些方式基本就能搞定了,但是更隐蔽的 bug 会耗费大量的时间和人力。更好的方式是什么?

首先,排查是程序问题还是环境问题,把线上程序恢复到运行正常时的老版本,如果出现了同样的问题,那就是生产环境发生了改变。如果运行正常,要么是你修改老 bug 时引入了新 bug,要么是新增加的代码出现了问题。

其次,阅读产品的 changelog,根据代码提交的时间线构建系统,通过二分法排查,定位是哪部分代码引起的问题。

第三,排除了所有的不可能,剩下的无论看起来如何不可能,就是它干的。

以上只是一个简单的例子,实际的情况可能比这个例子复杂一百倍,需要我们综合使用各种方式进行交叉比对和错误排查才能解决。这仅仅是遇到问题解决问题,更多的时候是需要你提出问题,并解决问题,那是更高的境界。

很多人学了那么多编程语言,写了十几年程序,最终依然无法做到以最小的代价解决问题,不禁让人扼腕叹息。

程序员真正的价值是什么?以最小的代价解决问题!知行合一,方可无敌于天下。

发表在 其它 | 留下评论

实例代码:acedSSGet做选择的时候使用关键字(:K)

//—————————————————————————–

//—– acrxEntryPoint.cpp

//—————————————————————————–

#include “StdAfx.h”

#include “resource.h”

 

//—————————————————————————–

#define szRDS _RXST(“”)

//将ID数组转换为resbuf

void IdsToResbuf(struct resbuf*& rb,AcDbObjectIdArray& ids)

{

struct resbuf* rbEnd=rb;

Acad::ErrorStatus es=Acad::eOk;

for(int i=0;i<ids.logicalLength();i++)

{

ads_name ent;

es=acdbGetAdsName(ent,ids.at(i));

if(es!=Acad::eOk)

{

continue;

}

if(rbEnd==NULL)

{

rb=acutBuildList(RTENAME,ent,0);

rbEnd=rb;

}

else if(rbEnd!=NULL)

{

rbEnd->rbnext=acutBuildList(RTENAME,ent,0);

rbEnd=rbEnd->rbnext;

}

}

}

//获取所有的块参照

Acad::ErrorStatus GetAllBREF(AcDbObjectIdArray& ids,AcDbBlockTableRecord* pRecord)

{

if(pRecord==NULL)

{

return Acad::eNullPtr;

}

AcDbBlockTableRecordIterator* pIterator=NULL;

Acad::ErrorStatus es=pRecord->newIterator(pIterator);

if(es!=Acad::eOk)

{

return es;

}

//用std::auto_ptr包装,尽量不直接暴露指针

std::auto_ptr<AcDbBlockTableRecordIterator> spIterator(pIterator);

for(spIterator->start();!spIterator->done();spIterator->step())

{

AcDbEntity* pEntity=NULL;

es=spIterator->getEntity(pEntity,AcDb::kForRead);

if(es!=Acad::eOk)

{

continue;

}

AcDbEntityPointer spEnt;

//用AcDbEntityPointer包装,防止忘记close导致的CAD崩溃

spEnt.acquire(pEntity);

if(!spEnt->isKindOf(AcDbBlockReference::desc()))

{

continue;

}

ids.append(spEnt->objectId());

}

return Acad::eOk;

}

//获取所有的块参照

Acad::ErrorStatus GetAllBREF(AcDbObjectIdArray& ids)

{

AcDbDatabase* pDb=acdbHostApplicationServices()->workingDatabase();

if(pDb==NULL)

{

return Acad::eNullPtr;

}

//打开块表

AcDbBlockTablePointer spRec(pDb->blockTableId(),AcDb::kForRead);

if(spRec.openStatus()!=Acad::eOk)

{

return spRec.openStatus();

}

AcDbBlockTableIterator* pIterator=NULL;

//新建遍历器

Acad::ErrorStatus es=spRec->newIterator(pIterator);

if(es!=Acad::eOk)

{

return es;

}

//用std::auto_ptr包装,尽量不直接暴露指针

std::auto_ptr<AcDbBlockTableIterator> spIterator(pIterator);

for(spIterator->start();!spIterator->done();spIterator->step())

{

AcDbBlockTableRecord* pRecord=NULL;

es=spIterator->getRecord(pRecord,AcDb::kForRead);

if(es!=Acad::eOk)

{

continue;

}

GetAllBREF(ids,pRecord);

//记住一定要关闭

pRecord->close();

}

return Acad::eOk;

}

resbuf* ssCallback(const TCHAR* kword)

{

if(lstrcmpi(kword,_T(“Q”))==0)

{

AcDbObjectIdArray ids;

resbuf* rb=NULL;

GetAllBREF(ids);

IdsToResbuf(rb,ids);

return rb;

}

else if(lstrcmpi(kword,_T(“ER”))==0)

{

return acutBuildList(RTSTR,_T(“发生错误!”),0);

}

else if(lstrcmpi(kword,_T(“JX”))==0)

{

AfxMessageBox(_T(“完成一些工作后,继续执行选择操作”));

return NULL;

}

else

{

return acutBuildList(RTSTR,_T(“暂时不支持的关键字!”),0);

}

}

void Test()

{

resbuf* (*oldFunc) (const ACHAR*);

acedSSGetKwordCallbackPtr(&oldFunc);

acedSSSetKwordCallbackPtr(ssCallback);

//过滤器,只选择快参照

resbuf* rb = acutBuildList(RTDXF0, _T(“INSERT”), 0);

ads_name ssName;

//口(W)/上一个(L)/窗交(C)/框(BOX)/全部(ALL)/栏选(F)/圈围(WP)/圈交(CP)/编组(G)/添加(A)/删除(R)/多个(M)/前一个(P)/放弃(U)/自动(AU)/单个(SI)

//已经被使用了,不可以再使用

TCHAR* promptPtrs[2]={_T(“\n选择块[全图(Q)/错误(ER)/继续(JX)]:”),_T(“\n移除块:”)};

acedInitGet(RSG_NONULL,_T(“Q ER JX”));

ACHAR kwordlist[] = { _T(“Q ER JX _ Q ER JX”) };

int rc=acedSSGet(_T(“:$:K”), promptPtrs,kwordlist,rb,ssName);

if(rc!=RTNORM)

{

acutRelRb(rb);

acedSSSetKwordCallbackPtr(*oldFunc);

return;

}

acutRelRb(rb);

acedSSSetKwordCallbackPtr(*oldFunc);

}

//—————————————————————————–

//—– ObjectARX EntryPoint

class CExample001App : public AcRxArxApp {

 

public:

CExample001App () : AcRxArxApp () {}

 

virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {

// TODO: Load dependencies here

 

// You *must* call On_kInitAppMsg here

AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;

//增加命令Test

acedRegCmds->addCommand(_T(“Example001App”),_T(“Test”),_T(“Test”),0,Test);

// TODO: Add your initialization code here

 

return (retCode) ;

}

 

virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {

// TODO: Add your code here

 

// You *must* call On_kUnloadAppMsg here

AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;

 

// TODO: Unload dependencies here

//删除命令组

acedRegCmds->removeGroup(_T(“Example001App”));

return (retCode) ;

}

 

virtual void RegisterServerComponents () {

}

 

} ;

 

//—————————————————————————–

IMPLEMENT_ARX_ENTRYPOINT(CExample001App)

发表在 ObjectArx | 标签为 , , | 留下评论

强制去教育版源代码

强制去教育版源代码,支持CAD2004~CAD2014,支持32位和64位

需要直接使用的朋友,可以直接下载

常用的两款去教育版插件

 

//—————————————————————————–

//—— StdAfx.cpp : source file that includes just the standard includes

//—— StdAfx.pch will be the pre-compiled header

//—— StdAfx.obj will contain the pre-compiled type information

//—————————————————————————–

#include “StdAfx.h”

bool RemoveEduPlotStamp_Force(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

#ifdef _WIN64

d1+=0x00000008;

#else

d1+=0x00000004;

#endif

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

int i=0x00000600;

while(true)

{

if(!pDb->isEMR())

{

return true;

}

i++;

if(i>=0x00000fff)

{

return false;

}

DWORD d3=(DWORD)pVoid1;

d3+=i;

void* pVoid4=(void*)d3;

DWORD* pVoid5=(DWORD*)pVoid4;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid5)==0x01)

{

*pVoid5=0x00;

if(!pDb->isEMR())

{

#if _ARXDEBUG

acutPrintf(_T(“\r\n指针偏移;0x%x”),i);

#endif

return true;

}

else

{

*pVoid5=0x01;

}

}

 

}

return false;

}

#if _MSC_VER>=1600

#ifdef _WIN64

bool RemoveEduPlotStamp_13(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000008;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x00000ba8;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

#else

bool RemoveEduPlotStamp_13(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000004;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x00000884;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

#endif

#elif _MSC_VER>=1500

#ifdef _WIN64

bool RemoveEduPlotStamp_10(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000008;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x00000b80;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

#else

bool RemoveEduPlotStamp_10(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000004;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x0000086c;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

#endif

#elif _MSC_VER>=1400

bool RemoveEduPlotStamp_09(const AcDbDatabase* pDb)

{

return false;

}

//CAD08去除教育版标记

bool RemoveEduPlotStamp_08(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000004;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x00000824;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

//CAD08去除教育版标记

bool RemoveEduPlotStamp_07(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000004;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x000007dc;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

#else

//CAD06去除教育版标记

bool RemoveEduPlotStamp_06(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000004;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x000006d4;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

//CAD05去除教育版标记

bool RemoveEduPlotStamp_05(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000004;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x000006d4;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

//CAD04去除教育版标记

bool RemoveEduPlotStamp_04(const AcDbDatabase* pDb)

{

DWORD d1=(DWORD)pDb;

d1+=0x00000004;

void** pVoid=(void**)d1;

void* pVoid1=*pVoid;//取到内部的mpImpDb地址

DWORD d2=(DWORD)pVoid1;

d2+=0x000006d4;//取得mpImpDb内部的是否是教育版的标志

void* pVoid2=(void*)d2;

byte* pVoid3=(byte*)pVoid2;//转化为DWORD,0x00000000:非教育版,0x00000001:教育版

if((*pVoid3)==0x01)

{

*pVoid3=0x00;

return true;

}

else

{

return false;

}

}

#endif

 

bool Split(CString& src, CString token, CStringArray& resultArray,bool ingoreEmptyString=false)

{

if(src.IsEmpty())

{

return true;

}

int tokenSize = token.GetLength();

CString result;

CString srcouceStr = src;

while (true)

{

int index = srcouceStr.Find(token);

if (index == 0)

{

result = “”;

}

else if (index < 0)

{

if((!ingoreEmptyString)||(!srcouceStr.IsEmpty()))

{

resultArray.Add(srcouceStr);

}

return true;

}

else

{

result = srcouceStr.Left(index);

}

if((!ingoreEmptyString)||(!result.IsEmpty()))

{

resultArray.Add(result);

}

 

int sourceLength = srcouceStr.GetLength();

srcouceStr = srcouceStr.Right(sourceLength – index – tokenSize);

}

}

//功能: 指定的字符串是否是合理的长整数(只能处理十进制的)

//参数: value,指定的字符串

// nValue,返回长整数型结果

//返回: 是否是合理的长整数

BOOL IsValidLong(const CString value,long &lValue)

{

bool bNegative=false;//是否是负数

CString tmpValue=value;

try

{

tmpValue.Trim();

}

catch(…)

{

 

}

int nLen=tmpValue.GetLength();

if(nLen==0)

return FALSE;

TCHAR c=tmpValue.GetAt(0);

if(c==’-‘)

{

//负数

bNegative=true;

if(nLen==1)

{

//只有一个负号是不合理的

return FALSE;

}

tmpValue=tmpValue.Right(nLen-1);

nLen–;

}

long lTmpValue=0L;

c=tmpValue.GetAt(0);

if(c==’0′)

{

if(nLen==1)

{

lValue=0L;

return TRUE;

}

else

{

//第一位是0并且后面还有其它数字认为是不合理的

return FALSE;

}

}

else if(c>=’1’&&c<=’9’)

{

lTmpValue+=lTmpValue*10+c-‘0′;

for(int i=1;i<nLen;i++)

{

c=tmpValue.GetAt(i);

if(c>=’0’&&c<=’9’)

{

lTmpValue=lTmpValue*10+(c-‘0’);

}

else

{

//出现了非数字认为是不合理的

return FALSE;

}

}

}

else

{

//出现了非数字认为是不合理的

return FALSE;

}

lValue=bNegative?-lTmpValue:lTmpValue;

return TRUE;

}

int _getHostAppMinorVersion()

{

#if _MSC_VER>=1400

return acdbHostAppMinorVersion();

#else

const TCHAR* lpRootKey=acrxProductKey();

HKEY key = HKEY_LOCAL_MACHINE;

DWORD acadNum = 0;

if (RegOpenKeyEx(key, lpRootKey,0,KEY_READ, &key) != ERROR_SUCCESS)

{

return -1;

}

TCHAR strValue[128+1]={0};

DWORD dwType;

DWORD dwCount = sizeof(TCHAR)*128;

LONG lResult = RegQueryValueEx(key, _T(“Release”), NULL, &dwType,

(LPBYTE)strValue, &dwCount);

RegCloseKey(key);

if(lResult != ERROR_SUCCESS)

{

return -1;

}

CString src(strValue);

CString token=_T(“.”);

CStringArray resultArray;

Split(src,token,resultArray,true);

if(resultArray.GetCount()<2)

{

return -1;

}

CString strMinorVersion=resultArray.GetAt(1);

long nValue=-1;

if(!IsValidLong(strMinorVersion,nValue))

{

return -1;

}

if(nValue<0)

{

return -1;

}

return nValue;

#endif

}

int Glb_AppMinorVersion=-9999;

int getHostAppMinorVersion()

{

if(Glb_AppMinorVersion==-9999)

{

Glb_AppMinorVersion=_getHostAppMinorVersion();

}

return Glb_AppMinorVersion;

}

void RemoveEduPlotStamp(const AcDbDatabase* pDb)

{

if(pDb==NULL)

{

return;

}

if(!pDb->isEMR())

{

return;

}

int nMinorVersion=getHostAppMinorVersion();

bool rc=false;

#if _MSC_VER>=1600

if(nMinorVersion==0)

{

rc=RemoveEduPlotStamp_13(pDb);

}

#elif _MSC_VER>=1500

if(nMinorVersion==0)

{

rc=RemoveEduPlotStamp_10(pDb);

}

#elif _MSC_VER>=1400

if(nMinorVersion==0)

{

rc=RemoveEduPlotStamp_07(pDb);

}

else if(nMinorVersion==1)

{

rc=RemoveEduPlotStamp_08(pDb);

}

else if(nMinorVersion==2)

{

rc=RemoveEduPlotStamp_09(pDb);

}

#else

if(nMinorVersion==0)

{

rc=RemoveEduPlotStamp_04(pDb);

}

else if(nMinorVersion==1)

{

rc=RemoveEduPlotStamp_05(pDb);

}

else if(nMinorVersion==2)

{

rc=RemoveEduPlotStamp_06(pDb);

}

#endif

if(rc)

{

rc=!pDb->isEMR();

}

if(rc)

{

acutPrintf(_T(“\r\n清除教育版标志成功”));

}

else

{

acutPrintf(_T(“\r\n清除教育版标志失败,尝试强制清除”));

rc=RemoveEduPlotStamp_Force(pDb);

if(!rc)

{

acutPrintf(_T(“\r\n清除教育版标志失败,请将您的CAD版本,操作系统版本,32位系统/64位系统,32位CAD/64位CAD发送给作者\r\n邮箱:wdzhangsl@126.com,QQ:245804736”));

}

else

{

acutPrintf(_T(“\r\n强制清除教育版标志成功”));

}

 

}

}

发表在 ObjectArx | 标签为 | 留下评论

[转载]ObjectARX反应器概述

反应器机制是观察者模式的一种实现,在该机制下,有事件通知者和事件接收者,负责接收事件的称为反应器。在反应器可以从通知者处接收消息之前,必须显式地将反应器添加到通知者的反应器列表中(观察者模式中的通知对象列表)。

常见反应器类型:

编辑反应器:AcEditorReactor
实体反应器:AcDbEntityReactor
对象反应器:AcDbObjectReactor
图形数据库反应器:AcDbDatabaseReactor
文档管理反应器:AcApDocManagerReactor

根据反应器的基本性质,反应器被分为临时反应器和永久反应器。

临时反应器本身不是数据库对象,由开发者负责临时反应器的注册和卸载,用来监控数据库事件、用户操作以及其他的程序运行时的系统事件。

永久反应器是一个数据库的对象,由开发者创建并由AutoCAD负责删除,永久反应器可以接收及发送消息,可以被保存到DWG和DXF文件中,当图纸被加载的时候会重建永久反应器。用来实现对象之间的关联反应。

如何使用一个临时反应器

从ARX内建的一系列反应器类中挑选一个合适的类派生,实现相关函数并注册反应器。

注意:永久反应器由AutoCAD负责删除,而临时反应器由程序员来负责删除。

如何使用一个永久反应器

    1:从AcDbObject派生一个新类,并且实现你需要使用的事件函数。

    2:将反应器对象实例化。

    3:将反应器对象添加到数据库中,并将其存储起来(一般是存到容器中)

    4:将反应器对象通过addPersistentReactor函数添加到通知者的反应器列表中。这个函数需要使用到反应器对象的id。

另外,需要使用ObjectARX的类声明宏为它创建一个类描述符对象

如果不使用ObjectARX宏,当自定义类被保存时将会继承其父类的类描述,并且当它从文件中被读出时会丢失标识。

反应器使用原则

1:不要依赖激活的顺序

除了类似commandWillStart和commandEnded这样的先后关系,不能依赖其他的顺序,因为引入新的通知或已有通知被重新排序时都会改变通知的顺序。

2:不要依赖通知间操作的顺序

对于一个反应器,先接收到了A对象的操作通知,后接到了B对象的操作通知,这不能保证A对象是在B对象之前操作的。

3:不要在通知回调函数中使用任何用户交互函数

任何与用户交互的函数都不要调用(类似于获取点等操作)

发表在 ObjectArx | 标签为 , , | 留下评论

[转载]objectarx 加载菜单-ObjectARX中右键(快捷)菜单的实现方法

网上看到好像网友问到在AutoCAD窗口中实现右键菜单的方法,觉得这种技术很实用,在许多开发应用中都能用得到,所以就写了这篇文章,以供大家参考。由于本人水平有限,不对之处敬请原谅。   右键菜单,也叫快捷菜单,在Windows编程中叫上下文(context)菜单。ObjectARX本身提供了一套处理上下文菜单的机制。在ObjectARX类库中有一个名为AcEdUIContext的类,此类负责在ObjectARX应用中的上下文菜单中添加自己的菜单项,而原菜单项不会被破坏,这也是此种方法的优点之一。用AcEdUIContext类添加菜单时,菜单项的数目没有限制,但必须是文本菜单。菜单可以层叠,但不允许使用键盘加速键,不能够在状态行显示快捷菜单命令状态提示。此类可以处理三种情况下的上下文菜单:一个默认上下文菜单,二是实体对象上下文菜单,三是命令执行时上下文菜单。虽然菜单出现的时机不同,但方法基本相同,它们之间主要的不同是所用的加载和卸载函数不同。下面加以详细介绍。
在AcEdUIContext为中包含了三个重要的成员函数,他们分别是:
(1) AutoCAD系统获取快捷菜单句柄函数   virtual void * getMenuContext(const AcRxClass * unnamed,const AcDbObjectIdArray& unnamed) = 0;   其中,第一个参数unnamed 是当前所选择的实体的对象句柄,第二个参数unnamed是所选实体的实体ID数组。这两个参数只有在实体对象上下文菜单中有效。
(2) 菜单项命令事件响应函数   virtual void onCommand(Adesk::UInt32 unnamed) = 0;   其中,unnamed是相应菜单项的菜单ID。此函数在用户选择执行快捷菜单中的某个菜单项时被调用。
(3) 菜单更新函数   virtual void OnUpdateMenu();   AutoCAD在快捷菜单弹出之前调用此函数。相当于MFC中的菜单更新事件,我们可以在这个函数中改变菜单项的检查状态或使能菜单项等。
其实,我们利用ObjectARX实现上下文菜单要做的工作主要是重载并填写这几个AcEdUIContext成员函数,其操作方法如下:
首先,我们从AcEdUIContext类派生一个自己的类,名字就叫CDefaultContextMenu吧,当然,你可以按自己的喜好起名字了:-)。然后,在派生的类中重载以上三个函数。
class CDefaultContextMenu: public AcEdUIContext { public: CDefaultContextMenu(); ~CDefaultContextMenu();
// 如下重载以下三个函数 virtual void* getMenuContext(const AcRxClass *pClass, const AcDbObjectIdArray& ids) ; virtual void onCommand(Adesk::UInt32 cmdIndex); virtual void OnUpdateMenu();
private: CMenu *m_pDemoMenu; // 用来增加菜单项的MFC菜单对象,使用它是为了加载我们在VC中增加的菜单资源。 HMENU m_hDemoMenu; // 菜单项所对应的句柄,这才是我们真正要加载的的菜单项,它是m_pDemoMenu中的一项。 };
接下来我们需要做的是:(1)在构造函数中加载菜单资源;(2)在getMenuContext函数中添加显示我们自己菜单项的代码;(3)在onCommand函数中处理命令执行代码;(4)在OnUpdateMenu中修改菜单项的显示状态(此步可选可不选);(5)在析构函数中卸载资源。
--在构造函数中加载菜单资源   acDocManager->pushResourceHandle(_hdllInstance); // 切换当前使用的资源,千万不要忘记加上吆!_hdllInstance是模块 //实例指针,通过extern引用到使用的位置就可以了。 m_pDemoMenu= new CMenu; // 创建一个菜单对象 m_pDemoMenu->LoadMenu(IDR_DEMO_DEFAULT_MENU); // 使用创建的菜单对象加载在资源编辑器中编辑好的资源 acDocManager->popResourceHandle(); // 再把资源切换回来吧!
--在getMenuContext函数中添加显示我们自己菜单项的代码 m_hDemoMenu= m_pDemoMenu->GetSubMenu(0)->GetSafeHmenu(); // 这里我们就显示已经加载的菜单(m_pDemoMenu)中的第一个子菜单吧! return &m_hDemoMenu; // 返回子菜单对象的句柄
--在onCommand函数中处理命令执行代码 acDocManager->pushResourceHandle(_hdllInstance); // 切换当前使用的资源
CString strMenuTitle, strPrompt; m_pMenu->GetMenuString(cmdIndex,strMenuTitle,MF_BYCOMMAND); // 获取一所选菜单项的文本标题 strPrompt.Format(“\n您已经选取了菜单:%s\n”,strMenuTitle); acutPrintf(strPrompt); // 我们的例子显示哪一个菜单项被选择 acedPostCommandPrompt(); // 显示命令提示
acDocManager->popResourceHandle(); // 将资源切换回来
--在OnUpdateMenu中修改菜单项的显示状态 m_pDemoMenu->EnableMenuItem(IDR_DEMO_DEFAULT_MENU_ITEM1,MF_GRAYED); // 使菜单变灰 m_pDemoMenu->EnableMenuItem(IDR_DEMO_DEFAULT_MENU_ITEM2,MF_ENABLED); // 使能菜单项 m_pDemoMenu->CheckMenuItem(IDR_DEMO_DEFAULT_MENU_ITEM3, MF_BYCOMMAND|MF_CHECKED); // 复选菜单项
--在析构函数中卸载资源 if (m_pMenu) delete m_pMenu; // 不释放的话麻烦可大呀!!!
以上用默认上下文菜单为例对AcEdUIContext类的使用方法作了阐述,至于其他两种基本是与默认上下文菜单相同。只不过在实体对象上下文菜单中的getMenuContext函数中可以对所选的实体进行响应,因为我们可以通过getMenuContext函数的参数获取实体对象。
有了以上的准备工作,我们就可以按照菜单显示时机加载不同种类的菜单了。
--首先,要行声明一个全局的上下文菜单对象,如下:   CDefaultContextMenu *gpDefDemoCM; // 默认上下文菜单 CEntityContextMenu *gpEntDemoCM; // 实体对象上下文菜单 CCmdContextMenu *gpCmdDemoCM; // 命令时上下文菜单
--然后,在初始化ARX应用时创建并加载上下文菜单对象。   gpDefDemoCM = new CDefaultContextMenu; // 创建默认上下文菜单 gpEntDemoCM = new CEntityContextMenu; // 创建实体对象上下文菜单 gpCmdDemoCM = new CCmdContextMenu; // 创建命令时上下文菜单
acDocManager->pushResourceHandle(_hdllInstance); // 切换当前使用的资源
acedAddDefaultContextMenu(gpDefDemoCM, pAppID); // 向AutoCAD应用中添加默认上下文菜单
acedAddObjectContextMenu(AcDbEntity::desc(), gpEntDemoCM , pAppID); // 向AutoCAD应用中添加实体对象上下文菜单
// 向AutoCAD应用中添加命令时上下文菜单 // myCmd是一个命令函数。第一个参数是命令组名,第二个参数是全局命令名, // 第三个参数是本地命令名,第四个参数是命令模式,第5和6个参数就不用说了,大家应该明白了。:-0 acedRegCmds->addCommand(“MyGrp”, “MyDemo”, “MyDemo”, ACRX_CMD_MODAL, &myCmd, gpCmdDemoCM );
acDocManager->popResourceHandle(); // 切换回资源
说明:pAppID是acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)中是第二个参数。acedAddObjectContextMenu中的第一个参数根据实体的不同而不同,如对于线实体则为AcDbLine::desc()等。
--最后,在卸载ARX应用时,将加载的上下文菜单对象移除,并释放内存空间。   HINSTANCE hInst = AfxGetResourceHandle(); // 保证资源正确 AfxSetResourceHandle(_hdllInstance);
acedRemoveDefaultContextMenu(gpDefDemoCM ); // 移除默认上下文菜单 acedRemoveObjectContextMenu(AcDbEntity::desc(), gpEntDemoCM ); // 移除实体对象上下文菜单 acedRegCmds->removeGroup(“MyGrp”); // 移除命令组”MyGrp”
delete gpDefDemoCM; delete gpEntDemoCM; delete gpCmdDemoCM;
AfxSetResourceHandle(hInst);

 

转自:http://www.goldenbg.com/article.asp?id=524&page=6

希望对大家有帮助.

发表在 ObjectArx | 标签为 , | 留下评论

常用的两款去教育版插件

强制去教育版.20141105

下载地址:http://yun.baidu.com/share/link?shareid=882418925&uk=721859502

【乱刀-DWG文件去除「教育版」】201300808

http://yun.baidu.com/share/link?shareid=903082007&uk=721859502

发表在 CAD实用软件 | 标签为 | 留下评论

DevExpress汉化

using System;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraGrid.Localization;
using DevExpress.XtraBars.Customization;
using DevExpress.XtraBars.Localization;
using DevExpress.XtraNavBar;
using DevExpress.XtraPrinting.Localization;
using DevExpress.XtraTreeList.Localization;
using DevExpress.XtraVerticalGrid.Localization;
namespace ChineseLanguage
{
    public class Chinese
    {
        public Chinese()
        {
            Localizer.Active = new XtraEditors_CN();
            GridLocalizer.Active = new XtraGrid_CN();
            BarLocalizer.Active = new XtraBar_CN();
            //BarLocalizer.Active.Customization = new XtraBarsCustomizationLocalization_CN();
            NavBarLocalizer.Active = new XtraNavBar_CN();
           PreviewLocalizer.Active = new XtraPrinting_CN();
            //ReportLocalizer.Active = new XtraReports_CN();
            //TreeListLocalizer.Active = new XtraTreeList_CN();
            VGridLocalizer.Active = new XtraVerticalGrid_CN();

        }
    }
    public class XtraEditors_CN : Localizer
    {
        public XtraEditors_CN()
        {

            // 
            // TODO: 在此处添加构造函数逻辑

            //

        }
        public override string Language
        {
            get
            {
                return “简体中文”;
            }

        }
        public override string GetLocalizedString(StringId id)
        {
            switch (id)
            {
                case StringId.TextEditMenuCopy: return “复制(&C)”;
                case StringId.TextEditMenuCut: return “剪切(&T)”;
                case StringId.TextEditMenuDelete: return “删除(&D)”;
                case StringId.TextEditMenuPaste: return “粘贴(&P)”;
                case StringId.TextEditMenuSelectAll: return “全选(&A)”;
                case StringId.TextEditMenuUndo: return “撤消(&U)”;
                case StringId.UnknownPictureFormat: return “未知图片格式”;
                case StringId.DateEditToday: return “今天”;
                case StringId.DateEditClear: return “清空”;
                case StringId.DataEmpty: return “无图像”;
                case StringId.ColorTabWeb: return “网页”;
                case StringId.ColorTabSystem: return “系统”;
                case StringId.ColorTabCustom: return “自定义”;
                case StringId.CheckUnchecked: return “未选择”;
                case StringId.CheckIndeterminate: return “不确定”;
                case StringId.CheckChecked: return “已选择”;
                case StringId.CaptionError: return “标题错误”;
                case StringId.Cancel: return “取消”;
                case StringId.CalcError: return “计算错误”;
                case StringId.CalcButtonBack: return base.GetLocalizedString(id);
                case StringId.CalcButtonC: return base.GetLocalizedString(id);
                case StringId.CalcButtonCE: return base.GetLocalizedString(id);
                case StringId.CalcButtonMC: return base.GetLocalizedString(id);
                case StringId.CalcButtonMR: return base.GetLocalizedString(id);
                case StringId.CalcButtonMS: return base.GetLocalizedString(id);
                case StringId.CalcButtonMx: return base.GetLocalizedString(id);
                case StringId.CalcButtonSqrt: return base.GetLocalizedString(id);
                case StringId.OK: return “确定”;
                case StringId.PictureEditMenuCopy: return “复制(&C)”;
                case StringId.PictureEditMenuCut: return “剪切(&T)”;
                case StringId.PictureEditMenuDelete: return “删除(&D)”;
                case StringId.PictureEditMenuLoad: return “加载(&L)”;
                case StringId.PictureEditMenuPaste: return “粘贴(&P)”;
                case StringId.PictureEditMenuSave: return “保存(&S)”;
                case StringId.PictureEditOpenFileError: return “错误图片格式”;
                case StringId.PictureEditOpenFileErrorCaption: return “打开错误”;
                case StringId.PictureEditOpenFileFilter: return “位图文件(*.bmp)|*.bmp|GIF动画 (*.gif)|*.gif|JPEG(*.jpg;*.jpeg)|*.jpg;*.jpeg|ICO(*.ico)|*.ico|所有图片文件|*.bmp;*.gif;*.jpeg;*.jpg;*.ico|所有文件(*.*)|*.*”;
                case StringId.PictureEditOpenFileTitle: return “打开”;
                case StringId.PictureEditSaveFileFilter: return “位图文件(*.bmp)|*.bmp|GIF动画(*.gif)|*.gif|JPEG(*.jpg)|*.jpg”;
                case StringId.PictureEditSaveFileTitle: return “保存为”;
                case StringId.TabHeaderButtonClose: return “关闭”;
                case StringId.TabHeaderButtonNext: return “下一页”;
                case StringId.TabHeaderButtonPrev: return “上一页”;
                case StringId.XtraMessageBoxAbortButtonText: return “中断(&A)”;
                case StringId.XtraMessageBoxCancelButtonText: return “取消(&C)”;
                case StringId.XtraMessageBoxIgnoreButtonText: return “忽略(&I)”;
                case StringId.XtraMessageBoxNoButtonText: return “否(&N)”;
                case StringId.XtraMessageBoxOkButtonText: return “确定(&O)”;
                case StringId.XtraMessageBoxRetryButtonText: return “重试(&R)”;
                case StringId.XtraMessageBoxYesButtonText: return “是(&Y)”;
                case StringId.ImagePopupEmpty: return “(空)”;
                case StringId.ImagePopupPicture: return “(图片)”;
                case StringId.InvalidValueText: return “无效的值”;
                case StringId.LookUpEditValueIsNull: return “[无数据]”;
                case StringId.LookUpInvalidEditValueType: return “无效的数据类型”;
                case StringId.MaskBoxValidateError: return “输入数值不完整. 是否须要修改? 是 – 回到编辑模式以修改数值. 否 – 保持原来数值. 取消 – 回复原来数值. “;
                case StringId.NavigatorAppendButtonHint: return “添加”;
                case StringId.NavigatorCancelEditButtonHint: return “取消编辑”;
                case StringId.NavigatorEditButtonHint: return “编辑”;
                case StringId.NavigatorEndEditButtonHint: return “结束编辑”;
                case StringId.NavigatorFirstButtonHint: return “第一条”;
                case StringId.NavigatorLastButtonHint: return “最后一条”;
                case StringId.NavigatorNextButtonHint: return “下一条”;
                case StringId.NavigatorNextPageButtonHint: return “下一页”;
                case StringId.NavigatorPreviousButtonHint: return “上一条”;
                case StringId.NavigatorPreviousPageButtonHint: return “上一页”;
                case StringId.NavigatorRemoveButtonHint: return “删除”;
                case StringId.NavigatorTextStringFormat: return “记录{0}/{1}”;
                case StringId.None: return “”;
                case StringId.NotValidArrayLength: return “无效的数组长度.”;
            }
            return base.GetLocalizedString(id);
        }
    }

    public class XtraGrid_CN : GridLocalizer
    {
        public override string Language
        {
            get
            {

                return “简体中文”;
            }
        }
        public override string GetLocalizedString(GridStringId id)
        {
            switch (id)
            {
                case GridStringId.CardViewNewCard: return “新卡片”;
                case GridStringId.CardViewQuickCustomizationButton: return “自定义格式”;
                case GridStringId.CardViewQuickCustomizationButtonFilter: return “筛选”;
                case GridStringId.CardViewQuickCustomizationButtonSort: return “排序”;
                case GridStringId.ColumnViewExceptionMessage: return “是否确定修改?”;
                case GridStringId.CustomFilterDialog2FieldCheck: return “字段”;
                case GridStringId.CustomFilterDialogCancelButton: return “取消”;
                case GridStringId.CustomFilterDialogCaption: return “条件为:”;
                //case GridStringId.CustomFilterDialogConditionBlanks:return “空值”;
                //case GridStringId.CustomFilterDialogConditionEQU:return “等于=”;
                //case GridStringId.CustomFilterDialogConditionGT:return “大于>”;
                //case GridStringId.CustomFilterDialogConditionGTE:return “大于或等于>=”;
                //case GridStringId.CustomFilterDialogConditionLike:return “包含”;
                //case GridStringId.CustomFilterDialogConditionLT:return “小于<“;
                //case GridStringId.CustomFilterDialogConditionLTE:return “小于或等于>=”;
                //case GridStringId.CustomFilterDialogConditionNEQ:return “不等于<>”;
                //case GridStringId.CustomFilterDialogConditionNonBlanks:return “非空值”;
                //case GridStringId.CustomFilterDialogConditionNotLike:return “不包含”;
                case GridStringId.CustomFilterDialogFormCaption: return “清除筛选条件(&L)”;
                case GridStringId.CustomFilterDialogOkButton: return “确定(&O)”;
                case GridStringId.CustomFilterDialogRadioAnd: return “和(&A)”;
                case GridStringId.CustomFilterDialogRadioOr: return “或者(&O)”;
                case GridStringId.CustomizationBands: return “分区”;
                case GridStringId.CustomizationCaption: return “自定义显示字段”;
                case GridStringId.CustomizationColumns: return “列”;
                case GridStringId.FileIsNotFoundError: return “文件{0}没找到!”;
                case GridStringId.GridGroupPanelText: return “拖曳一列页眉在此进行排序”;
                case GridStringId.GridNewRowText: return “单击这里新增一行”;
                case GridStringId.GridOutlookIntervals: return “一个月以上;上个月;三周前;两周前;上周;;;;;;;;昨天;今天;明天; ;;;;;;;下周;两周后;三周后;下个月;一个月之后;”;
                case GridStringId.MenuColumnBestFit: return “自动调整字段宽度”;
                case GridStringId.MenuColumnBestFitAllColumns: return “自动调整所有字段宽度”;
                case GridStringId.MenuColumnClearFilter: return “清除筛选条件”;
                case GridStringId.MenuColumnColumnCustomization: return “显示/隐藏字段”;
                case GridStringId.MenuColumnFilter: return “筛选”;
                case GridStringId.MenuColumnGroup: return “按此列分组”;
                case GridStringId.MenuColumnGroupBox: return “分组区”;
                case GridStringId.MenuColumnSortAscending: return “升序排序”;
                case GridStringId.MenuColumnSortDescending: return “降序排序”;
                case GridStringId.MenuColumnUnGroup: return “取消分组”;
                case GridStringId.MenuFooterAverage: return “平均”;
                case GridStringId.MenuFooterAverageFormat: return “平均={0:#.##}”;
                case GridStringId.MenuFooterCount: return “计数”;
                case GridStringId.MenuFooterCountFormat: return “{0}”;
                case GridStringId.MenuFooterMax: return “最大值”;
                case GridStringId.MenuFooterMaxFormat: return “最大值={0}”;
                case GridStringId.MenuFooterMin: return “最小”;
                case GridStringId.MenuFooterMinFormat: return “最小值={0}”;
                case GridStringId.MenuFooterNone: return “没有”;
                case GridStringId.MenuFooterSum: return “合计”;
                case GridStringId.MenuFooterSumFormat: return “求和={0:#.##}”;
                case GridStringId.MenuGroupPanelClearGrouping: return “取消所有分组”;
                case GridStringId.MenuGroupPanelFullCollapse: return “收缩全部分组”;
                case GridStringId.MenuGroupPanelFullExpand: return “展开全部分组”;
                case GridStringId.PopupFilterAll: return “(所有)”;
                case GridStringId.PopupFilterBlanks: return “(空值)”;
                case GridStringId.PopupFilterCustom: return “(自定义)”;
                case GridStringId.PopupFilterNonBlanks: return “(非空值)”;
                case GridStringId.PrintDesignerBandedView: return “打印设置(区域模式)”;
                case GridStringId.PrintDesignerBandHeader: return “区标题”;
                case GridStringId.PrintDesignerCardView: return “打印设置(卡片模式)”;
                case GridStringId.PrintDesignerDescription: return “为当前视图设置不同的打印选项.”;
                case GridStringId.PrintDesignerGridView: return “打印设置(表格模式)”;
                case GridStringId.WindowErrorCaption: return “错误”;
            }
            return base.GetLocalizedString(id);
        }
    }
    public class XtraBar_CN : BarLocalizer
    {
        public override string Language
        {
            get
            {
                return “简体中文”;
            }
        }
        public override string GetLocalizedString(BarString id)
        {
            switch (id)
            {
                case BarString.AddOrRemove: return “新增或删除按钮(&A)”;
                case BarString.CustomizeButton: return “自定义(&C)”;
                case BarString.CustomizeWindowCaption: return “自定义”;
                case BarString.MenuAnimationFade: return “减弱”;
                case BarString.MenuAnimationNone: return “空”;
                case BarString.MenuAnimationRandom: return “任意”;
                case BarString.MenuAnimationSlide: return “滑动”;
                case BarString.MenuAnimationSystem: return “(系统默认值)”;
                case BarString.MenuAnimationUnfold: return “展开”;
                case BarString.NewToolbarCaption: return “新建工具栏”;
                case BarString.None: return “”;
                case BarString.RenameToolbarCaption: return “重新命名”;
                case BarString.ResetBar: return “是否确实要重置对 ‘{0}’ 工具栏所作的修改?”;
                case BarString.ResetBarCaption: return “自定义”;
                case BarString.ResetButton: return “重设工具栏(&R)”;
                case BarString.ToolBarMenu: return “重设(&R)$删除(&D)$!命名(&N)$!标准(&L)$总使用文字(&T)$在菜单中只用文字(&O)$图像与文本(&A)$!开始一组(&G)$常用的(&M)”;
                case BarString.ToolbarNameCaption: return “工具栏名称(&T):”;
            }
            return base.GetLocalizedString(id);
        }
    }
    public class XtraNavBar_CN :NavBarLocalizer
    {
        public override string Language
        {
            get
            {
                return “简体中文”;
            }
        }
        public override string GetLocalizedString(NavBarStringId id)
        {
            switch(id)
            {
                case NavBarStringId.NavPaneChevronHint:return “配置按钮”;
                case NavBarStringId.NavPaneMenuAddRemoveButtons:return “添加或删除按钮(&A)”;
                case NavBarStringId.NavPaneMenuShowFewerButtons:return “显示较少的按钮(&F)”;
                case NavBarStringId.NavPaneMenuShowMoreButtons:return “显示更多的按钮(&M)”;
            }
            return base.GetLocalizedString(id);
        }
    }
    public class XtraPrinting_CN :PreviewLocalizer
    {
        public override string Language
        {
            get
            {
                return “简体中文”;
            }
        }
        public override string GetLocalizedString(PreviewStringId id)
        {
            switch(id)
            {
                case PreviewStringId.Button_Apply:return “应用”;
                case PreviewStringId.Button_Cancel:return “取消”;
                case PreviewStringId.Button_Help:return “帮助”;
                case PreviewStringId.Button_Ok:return “确定”;
                case PreviewStringId.EMail_From:return “From”;
                case PreviewStringId.Margin_BottomMargin:return “下边界”;
                case PreviewStringId.Margin_Inch:return “英寸”;
                case PreviewStringId.Margin_LeftMargin:return “左边界”;
                case PreviewStringId.Margin_Millimeter:return “毫米”;
                case PreviewStringId.Margin_RightMargin:return “右边界”;
                case PreviewStringId.Margin_TopMargin:return “上边界”;
                case PreviewStringId.MenuItem_BackgrColor:return “颜色(&C)”;
                case PreviewStringId.MenuItem_Background:return “背景(&B)”;
                case PreviewStringId.MenuItem_CsvDocument:return “CSV文件”;
                case PreviewStringId.MenuItem_Exit:return “退出(&X)”;
                case PreviewStringId.MenuItem_Export:return “导出(&E)”;
                case PreviewStringId.MenuItem_File: return “文件(&F)”;
                case PreviewStringId.MenuItem_GraphicDocument:return “图片文件”;
                case PreviewStringId.MenuItem_HtmDocument:return “HTML文件”;
                case PreviewStringId.MenuItem_MhtDocument:return “MHT文件”;
                case PreviewStringId.MenuItem_PageSetup:return “页面设置(&U)”;
                case PreviewStringId.MenuItem_PdfDocument:return “PDF文件”;
                case PreviewStringId.MenuItem_Print:return “打印(&P)”;
                case PreviewStringId.MenuItem_PrintDirect:return “直接打印(&R)”;
                case PreviewStringId.MenuItem_RtfDocument:return “RTF文件”;
                case PreviewStringId.MenuItem_Send:return “发送(&D)”;
                case PreviewStringId.MenuItem_TxtDocument:return “TXT文件”;
                case PreviewStringId.MenuItem_View:return “视图(&V)”;
                case PreviewStringId.MenuItem_ViewStatusbar:return “状态栏(&S)”;
                case PreviewStringId.MenuItem_ViewToolbar:return “工具栏(&T)”;
                case PreviewStringId.MenuItem_Watermark:return “水印(&W)”;
                case PreviewStringId.MenuItem_XlsDocument:return “XLS文件”;
                case PreviewStringId.MPForm_Lbl_Pages:return “页”;
                case PreviewStringId.Msg_CreatingDocument:return “正在生成文件”;
                case PreviewStringId.Msg_CustomDrawWarning:return “警告!”;
                case PreviewStringId.Msg_EmptyDocument:return “此文件没有页面.”;
                case PreviewStringId.Msg_FontInvalidNumber:return “字体大小不能为0或负数”;
                case PreviewStringId.Msg_IncorrectPageRange:return “设置的页边界不正确”;
                case PreviewStringId.Msg_NeedPrinter:return “没有安装打印机.”;
                case PreviewStringId.Msg_NotSupportedFont:return “这种字体不被支持”;
                case PreviewStringId.Msg_PageMarginsWarning:return “一个或以上的边界超出了打印范围.是否继续?”;
                case PreviewStringId.Msg_WrongPageSettings:return “打印机不支持所选的纸张大小. 是否继续打印?”;
                case PreviewStringId.Msg_WrongPrinter:return “无效的打印机名称.请检查打印机的设置是否正确.”;
                case PreviewStringId.PageInfo_PageDate:return “[Date Printed]”;
                case PreviewStringId.PageInfo_PageNumber:return “[Page #]”;
                case PreviewStringId.PageInfo_PageNumberOfTotal:return “[Page # of Pages #]”;
                case PreviewStringId.PageInfo_PageTime:return “[Time Printed]”;
                case PreviewStringId.PageInfo_PageUserName:return “[User Name]”;
                case PreviewStringId.PreviewForm_Caption:return “预览”;
                case PreviewStringId.SaveDlg_FilterBmp:return “BMP Bitmap Format”;
                case PreviewStringId.SaveDlg_FilterCsv:return “CSV文件”;
                case PreviewStringId.SaveDlg_FilterGif:return “GIF Graphics Interchange Format”;
                case PreviewStringId.SaveDlg_FilterHtm:return “HTML文件”;
                case PreviewStringId.SaveDlg_FilterJpeg:return “JPEG File Interchange Format”;
                case PreviewStringId.SaveDlg_FilterMht:return “MHT文件”;
                case PreviewStringId.SaveDlg_FilterPdf:return “PDF文件”;
                case PreviewStringId.SaveDlg_FilterPng:return “PNG Portable Network Graphics Format”;
                case PreviewStringId.SaveDlg_FilterRtf:return “RTF文件”;
                case PreviewStringId.SaveDlg_FilterTiff:return “TIFF Tag Image File Format”;
                case PreviewStringId.SaveDlg_FilterTxt:return “TXT文件”;
                case PreviewStringId.SaveDlg_FilterWmf:return “WMF Windows Metafile”;
                case PreviewStringId.SaveDlg_FilterXls:return “Excel文件”;
                case PreviewStringId.SaveDlg_Title:return “另存为”;
                case PreviewStringId.SB_CurrentPageNo:return “目前页码:”;
                case PreviewStringId.SB_PageInfo:return “{0}/{1}”;
                case PreviewStringId.SB_PageNone:return “无”;
                case PreviewStringId.SB_TotalPageNo:return “总页码:”;
                case PreviewStringId.SB_ZoomFactor:return “缩放系数:”;
                case PreviewStringId.ScrollingInfo_Page:return “页”;
                case PreviewStringId.TB_TTip_Backgr:return “背景色”;
                case PreviewStringId.TB_TTip_Close:return “退出”;
                case PreviewStringId.TB_TTip_Customize:return “自定义”;
                case PreviewStringId.TB_TTip_EditPageHF:return “页眉页脚”;
                case PreviewStringId.TB_TTip_Export:return “导出文件”;
                case PreviewStringId.TB_TTip_FirstPage:return “首页”;
                case PreviewStringId.TB_TTip_HandTool:return “手掌工具”;
                case PreviewStringId.TB_TTip_LastPage:return “尾页”;
                case PreviewStringId.TB_TTip_Magnifier:return “放大/缩小”;
                case PreviewStringId.TB_TTip_Map:return “文档视图”;
                case PreviewStringId.TB_TTip_MultiplePages:return “多页”;
                case PreviewStringId.TB_TTip_NextPage:return “下一页”;
                case PreviewStringId.TB_TTip_PageSetup:return “页面设置”;
                case PreviewStringId.TB_TTip_PreviousPage:return “上一页”;
                case PreviewStringId.TB_TTip_Print:return “打印”;
                case PreviewStringId.TB_TTip_PrintDirect:return “直接打印”;
                case PreviewStringId.TB_TTip_Search:return “搜索”;
                case PreviewStringId.TB_TTip_Send:return “发送E-Mail”;
                case PreviewStringId.TB_TTip_Watermark:return “水印”;
                case PreviewStringId.TB_TTip_Zoom:return “缩放”;
                case PreviewStringId.TB_TTip_ZoomIn:return “放大”;
                case PreviewStringId.TB_TTip_ZoomOut:return “缩小”;
                case PreviewStringId.WMForm_Direction_BackwardDiagonal:return “反向倾斜”;
                case PreviewStringId.WMForm_Direction_ForwardDiagonal:return “正向倾斜”;
                case PreviewStringId.WMForm_Direction_Horizontal:return “横向”;
                case PreviewStringId.WMForm_Direction_Vertical:return “纵向”;
                case PreviewStringId.WMForm_HorzAlign_Center:return “置中”;
                case PreviewStringId.WMForm_HorzAlign_Left:return “靠左”;
                case PreviewStringId.WMForm_HorzAlign_Right:return “靠右”;
                case PreviewStringId.WMForm_ImageClip:return “剪辑”;
                case PreviewStringId.WMForm_ImageStretch:return “伸展”;
                case PreviewStringId.WMForm_ImageZoom:return “缩放”;
                case PreviewStringId.WMForm_PageRangeRgrItem_All:return “全部”;
                case PreviewStringId.WMForm_PageRangeRgrItem_Pages:return “页码”;
                case PreviewStringId.WMForm_PictureDlg_Title:return “选择图片”;
                case PreviewStringId.WMForm_VertAlign_Bottom:return “底端”;
                case PreviewStringId.WMForm_VertAlign_Middle:return “中间”;
                case PreviewStringId.WMForm_VertAlign_Top:return “顶端”;
                case PreviewStringId.WMForm_Watermark_Asap:return “ASAP”;
                case PreviewStringId.WMForm_Watermark_Confidential:return “CONFIDENTIAL”;
                case PreviewStringId.WMForm_Watermark_Copy:return “COPY”;
                case PreviewStringId.WMForm_Watermark_DoNotCopy:return “DO NOT COPY”;
                case PreviewStringId.WMForm_Watermark_Draft:return “DRAFT”;
                case PreviewStringId.WMForm_Watermark_Evaluation:return “EVALUATION”;
                case PreviewStringId.WMForm_Watermark_Original:return “ORIGINAL”;
                case PreviewStringId.WMForm_Watermark_Personal:return “PERSONAL”;
                case PreviewStringId.WMForm_Watermark_Sample:return “SAMPLE”;
                case PreviewStringId.WMForm_Watermark_TopSecret:return “TOP SECRET”;
                case PreviewStringId.WMForm_Watermark_Urgent:return “URGENT”;
                case PreviewStringId.WMForm_ZOrderRgrItem_Behind:return “在后面”;
                case PreviewStringId.WMForm_ZOrderRgrItem_InFront:return “在前面”;
            }
            return base.GetLocalizedString(id);
        }
    }
    public class XtraVerticalGrid_CN :VGridLocalizer
    {
        public override string Language
        {
            get
            {
                return “简体中文”;
            }
        }
        public override string GetLocalizedString(VGridStringId id)
        {
            switch(id)
            {
                case VGridStringId.InvalidRecordExceptionText:return “是否确定修改?”;
                case VGridStringId.RowCustomizationDeleteCategoryText:return “删除”;
                case VGridStringId.RowCustomizationNewCategoryFormLabelText:return “标题”;
                case VGridStringId.RowCustomizationNewCategoryFormText:return “新增类别”;
                case VGridStringId.RowCustomizationNewCategoryText:return “新增”;
                case VGridStringId.RowCustomizationTabPageCategoriesText:return “类别”;
                case VGridStringId.RowCustomizationTabPageRowsText:return “行”;
                case VGridStringId.RowCustomizationText:return “自定义”;
                case VGridStringId.StyleCreatorName:return “自定义式样”;
            }
            return base.GetLocalizedString(id);
        }
    }

}

发表在 C# | 留下评论

像acdsee一样的看dwg的软件,基本上是秒开

知道acdsee软件吧,这个看dwg的软件像极了acdsee,极其方便,基本小图是秒开,不用打开cad,支持cad2015格式的文件,可在高低版本转换。你真的值得拥有的看dwg文件的神器

 

下载地址点这里:acadsee

发表在 实用软件 | 标签为 | 留下评论

DevExpress 14.1.4+DevExtreme+CodeRush+语言包+激活工具

http://yun.baidu.com/share/link?shareid=609454474&uk=721859502

 

改进和更新
新功能/更新
的CodeRush与重构!临
DXSpreadsheet为WPF
XtraBars套房
XtraEditors库
XtraGrid中套房
XtraSpreadsheet
已解决的问题
所有的ASP.NET控件
全部ASP.NET MVC产品
所有WinForms控件
ASP.NET演示
ASP.NET MVC的数据编辑器
ASP.NET MVC中的GridView
ASP.NET MVC的HTML编辑器
ASP.NET MVC的导航,布局和多用途扩展
ASP.NET MVC的报告
ASP.NET MVC的调度
ASP.NET MVC中的TreeList
ASP.NET导航,布局和多用途控制
ASPxGridView和编辑器套件
ASPxHtmlEditor
ASPxPivotGrid
ASPxScheduler套房
ASPxSpellChecker
ASPxThemeBuilder
的CodeRush为Visual Studio。NET
仪表盘
数据访问库
DXBars为WPF
DXCharts(XPF通用)
DXCharts为WPF
DXControls为Silverlight
DXControls为WPF
DXDocking为Silverlight
DXDocking为WPF
DXEditors为Silverlight
DXEditors为WPF
DXGrid(XPF通用)
DXGrid为WPF
DXMap为WPF
DXNavBar为WPF
DXPrinting为WPF
DXPropertyGrid为WPF
DXRibbon(XPF通用)
DXRibbon为WPF
DXScheduler为WPF
DXSpreadsheet为WPF
eXpressApp框架
安装(。net)
布局为Windows 8的XAML
PDF处理(通用)
PDF浏览器
PDF浏览器为WPF
PivotGrid核心
项目向导
报表服务器
的ReportViewer为ASP.NET
丰富的编辑文件服务器
捕捉
电子表格文件服务器
XtraBars套房
XtraCharts套房
XtraEditors库
XtraGauges套房
XtraGrid中套房
XtraLayout套房
XtraMap
XtraNavBar
XtraPrinting库
XtraReports套装软体
XtraRichEdit
XtraScheduler套房
XtraSpreadsheet
XtraTreeList套房
XtraVerticalGrid套房
新功能/更新
的CodeRush与重构!临

S136001 – XAML的重构-优化引用
DXSpreadsheet为WPF

Q560177 -新增能力,以显示单元格值的工具提示时,这个值不能完全适应单元格的边界
XtraBars套房

Q567816 -提供能力展示的模态弹出一个用户控件
T110789 – TileBar -介绍一个公共方法显示DropDownControl的TileBarItem
XtraEditors库

T112568 -文件-描述BaseEdit.DefaultErrorIconAlignment财产
T116112 – PictureEdit -添加UseDisabledStatePainter财产
T116123 – PictureEdit -提供获取滚动条的能力
XtraGrid中套房

T112049 – GridControl -添加了BestFitColumns方法的新重载
XtraSpreadsheet

T115165 -这是不可能选择一个单元格范围,并自动适应只有在选定范围内的值,根据其列大小
已解决的问题
所有的ASP.NET控件

T116257 – “类型错误:dataView.GetMainElement不是一个函数”的JavaScript错误的滚动控制了devexpress在某些情况下
T114458 -文档- EmbedRequiredClientLibraries属性描述是空的
全部ASP.NET MVC产品

T114984 -该Office2010Silver主题包含无效的CSS代码
所有WinForms控件

T115281 -该DesignHelpers.GetValidModuleName方法不能正常工作
ASP.NET演示

T116030 -数据编辑器-概述演示-在Chrome和Firefox破碎布局
T115057 -导航栏-功能演示- ASPxNavBar桑主题重叠选项卡的标题
ASP.NET MVC的数据编辑器

T115594 -数据编辑-传递给控制器的值无效
T116916 -编辑-该ReadOnlyStyle.ForeColor属性不起作用
ASP.NET MVC中的GridView

T117758 – GridView控件-错误“未设置为一个对象的实例的引用”导出过程中如果发生GridViewEditingMode =批次
T114839 – GridView中的批量编辑模式- MVCxClientGridViewBatchEditHelper对象没有被定义时,GridView控件是通过AJAX加载
ASP.NET MVC的HTML编辑器

T117985 -当切换全屏模式和关闭HTML编辑器有不正确的宽度在Chrome和Opera
ASP.NET MVC的导航,布局和多用途扩展

Q586978 -的FormLayout不正确重新调整大小的列表框宽度设定为100%,并放置到自举面板
T114762 – RoundPanel -新的客户端事件(BeginCallback,EndCallback,callBackError当,CollapsedChanged)不可在MVC中的ClientSideEvents财产
ASP.NET MVC的报告

T110361 -的DocumentViewer -报告缓存可以使用CacheReportDocument功能时,会丢失上的回调
ASP.NET MVC的调度

T109896 – NullReferenceException异常的SchedulerExtension.GetAppointmentToInsert尝试添加或编辑窗体上的appointement时
T112437 -禁用规模的Visible属性不会产生任何结果
ASP.NET MVC中的TreeList

T113064 -树列表-列宽不会被保存和恢复的Cookie
ASP.NET导航,布局和多用途控制

T112059 – ASPxDockPanel -第一个运行时创建的面板将显示在ASPxDockZone底部
T101921 – ASPxFormLayout -物品都在IE8正确对齐
T110495 – ASPxPopupControl窗口设置仅适用于第一窗口
T107025 – ASPxRibbon – ClientEnabled属性不嵌套在另一个RibbonDropDownButtonItem RibbonDropDownButtonItem工作
ASPxGridView和编辑器套件

T115204 – ASPxButton与原生=“true”和文本=“| <”在14.1.3显示不正确
T113701 – ASPxComboBox – ForeColor属性并不需要在14.1版本有什么影响
T117109 – ASPxGridView -菜单项前ASPxClientGridView.ContextMenu事件触发准备
T113800 – ASPxGridView – ASPxRatingControl在DataItemTemplate被画上了鼠标悬停如果EnableRowHotTrack财产是摩登,大都会和MetropolisBlue主题启用
T114874 – ASPxGridView -上下文菜单项的可见性属性不工作
T116928 – ASPxGridView – EditForm HorizontalAlign.WindowCenter无法在14.1.3工作
T114768 – ASPxGridView -提供建设为GridViewDataComboBoxColumn过滤条件中内置的过滤器时,选择算术运算符的能力
T114821 – ASPxGridView -提供客户端的ContextMenu事件参数菜单属性
T113899 – ASPxGridView -滚动条是不是在iPad上禁用网格可见
T115186 – ASPxGridView消失,当服务器端IsRowSelected方法升级之后被调用到14.1.3
T116776 – ASPxGridView ServerMode选中全部-当选择一排,电网加载所有的值从数据库
T113978 – ASPxGridView启用上下文菜单-右键点击一个EditForm模板抛出一个JavaScript错误
T115265 – ASPxGridViewExporter – ReportHeader不能正常显示
T116674 – ASPxHtmlEditor在IE11禁用设计视图时,抛出一个异常的JavaScript
T112373 – ASPxMemo -控制生长在高度时,AdjustControl()被调用IE9和更高
T110280 -当一个点被添加后的值一直使用递增/递减键改变ASPxSpinEdit不显示十进制值
T116079 – ASPxTabControl -控件的宽度变得不合理时两个控件被置于ASPxRoundPanel,每一个都具有100%的宽度
T110547 – ASPxTokenBox -如果控制被放置在一个表中ASPxPopupControl空的文本没有完全显示
T103802 – ASPxTokenBox -删除与长文本令牌图标是不可见
T113244 – ASPxTokenBox -令牌不能被删除,如果AllowCustomTokens =“假”
T110630 – ASPxTokenBox / ASPxComboBox -编辑器不会当连接到iPad上/ 7的iOS蓝牙键盘进行回调以获取新数据
T116221 -文档- ASPxGridView.FilterControlOperationVisibility事件的文章-不正确的代码片段
T115570 -不可能改变使用WebControl.Font属性文本编辑器字体属性
Q587113 -轻量级渲染的编辑模式V13.2减慢网页的加载时间
T118086 -禁用时,ASPxClientGridView.ContextMenu事件不会引发内置сontext菜单
ASPxHtmlEditor

T112612 – ASPxHtmlEditor – “权限被拒绝访问属性”parentNode“”导航与键盘的<input>标记一个文档时出现错误
T112246 – ASPxHtmlEditor -放置到功能区的RibbonTemplateItem所有控件都被禁用
T105861 – ASPxHTMLEditor -子弹转换成错误的符号
ASPxPivotGrid

T116859 – ASPxPivotGrid不显示在iPad4 IOS7 DataCells
B253233 – ASPxPivotGrid抛出JS错误,如果的ClientIDMode =静态
T108903 -如果自定义表格样式设置为StackedSideBySide,可以通过拖动字段具有悠久的显示名称,滚动隐藏字段“面板
T106024 -树视图里面的PivotGrid字段列表总是有默认的主题
ASPxScheduler套房

B255107 -防止坐落在一个约会的模板图像被拖累
T103100 -在ASPxDocumentViewer预览附表所示预约数据被切断,但是当远销显示精细的PDF
ASPxSpellChecker

T104876 – ASPxHtmlEditor抛出一个JavaScript人指数是该数组的边界之外“异常,如果自定义词典,用于拼写检查
ASPxThemeBuilder

T115415 – ASPxThemeBuilder – NullReferenceException异常是当某个注册表项是空的抛出
T115244 – ASPxThemeBuilder崩溃创建一个新的主题
T115115 -从13.2 MVC / ASP.NET自定义主题,升级到14.1
的CodeRush为Visual Studio。NET

Q568184 -代码问题-会员饰有一定的属性不应该被视为未使用
T113976 -的CodeRush拼写检查安装14.1后无法正常工作
T112640 -华润应该确定这个类应该在的情况下自动实现属性的实现为IDisposable接口
Q532912 -物业进行方法(S) -可用性检查速度太慢
T113777 -回归:单元测试运行停止工作在14.1(MSpec)
B253533 -模板选项页-文本被夹在模板的扩展和其他元素的树状列表
仪表盘

Q585276 -升级DashboardDesigner形式到新版本后不支持的操作都显示在功能区
T115763 – ASPxClientDashboardViewer.GetUnderlyingData提出了一个“不正确的请求队列”的错误
Q561640 – ASPxDashboardViewer -图和饼图的项目并不表示它们的大小太小,无法显示数据
T114614 – ASPxDashboardViewer -图表项目唐氏启用钻或主按产品系列过滤抛出一个异常,并不会呈现
T115563 – ASPxDashboardViewer -图表工具提示消失,如果一个或多个系列没有值
B255535 – DashboardDesigner渲染不正确的数据重新加载,并同时正在执行其他操作
T114124 -日期列类型字段显示不正确
Q586154 -错误与时间跨度参数加载保存的dashboad XML时
T114922 – NullReferenceException异常设置仪表板DataSource.Filter属性时使用的仪表板DashboardLoading事件
T116143 -问题与本地化添加和删除(参数)按钮
T112920 -问题与订购的仪表板图
T113085 -该ASPxClientDashboardViewer.RequestUnderlyingData方法,没有数据成员中指定产生的OLAP模式下的服务器错误
数据访问库

T114561 -报表数据源向导-不被使用的最终用户设计connections.xml文件,连接不会被保存
T116697 -报表向导不显示领域通过IDisplayNameProvider接口更改
T115224 – Xtrareport设计师不保存数据源的变化与14.1
T109563 – XtraReport向导- “无法加载指定的组件:”EntityFramework.SqlServer“。” 当绑定到实体框架模型抛出异常
T114544 – XtraReport向导约束力的报告,以实体框架的实体时,选择“无”作为一个存储过程后意外关闭
DXBars为WPF

T102966 -自定义模式-降指标是不是在某些主题中所示
T115575 -在Office 2010中蓝色的主题不正确的状态栏文字颜色
T107070 – RibbonControl – ButtonItems不处理键盘按键
DXCharts(XPF通用)

T115421 -代码-隐藏XYDiagram2DZoomEventArgs构造
T116178 -十字板不使用具有相对源绑定一个自定义模板,十字拉伸时,
DXCharts为WPF

T115774 -十字值线正确对齐(抢购)堆叠式酒吧
T114756 -在WPF RealtorWorld演示差劲的3D饼图表现
T105877 -迷你图-未处理的异常在某些情况下显示在GridControl模板中的迷你图时控制
T117050 – WPF图表光标发行14.1
T114608 – XYDiagram2D.PointToDiagram方法的情况下的DateTime规模引发一个异常
DXControls为Silverlight

T114210 -在DevExpres.Xpf.Printing.v14.1装配和DevExpress.Xpf.Controls.v14.1无效XmlnsDeclaration
DXControls为WPF

T115157 – “ArgumentException:物业行为不是在属性集合中找到”在WPF设计器
T112428 -将内容添加到DXTabItem在代码中,当DXTabControl.TabContentCacheMode属性不是“无”的背后是不工作
Q574383 – ComboBoxItem没有在Office2007Black主题悬停效果
T116778 -自定义通知位置
T116664 – DispatcherService如果从另一个线程调用不起作用
T111859 – DXWindow -最大化/最小化按钮的行为不正确时WindowState属性是在Loaded事件处理程序中设置
T115792 -鼠标滚轮不会为一个滚动控制与主题了devexpress时,它被放置在另一个滚动控制工作
T113812 – OpenFileDialogService和SaveFileDialogService没有在XAML中智能感知列表中显示了
Q469380 -当应用程序被显示全屏,有在屏幕的底部的一个缺口
T114913 – WPF主题Office2007Black:'{DependencyProperty.UnsetValue}’不是属性’背景’的有效值。
DXDocking为Silverlight

T113654 -一个面板不能在一个双击事件激活
DXDocking为WPF

T113714 -浮动DocumentPanel没有恢复到其最大化状态时,RestoreLayoutFromStream方法被调用
T104465 – DockLayoutManager导航过程中复制项目
T113615 – NullReferenceException异常升高在设计时,如果一个用户控件从DocumentPanel继承
T113215 -滚轮不适合在MDI方式DocumentPanel工作内容
DXEditors为Silverlight

T117597 – PopupColorEdit -启用IsTextEditable属性导致禁用应用程序的弹出菜单
DXEditors为WPF

T114448 – BaseEditSettings引发NullReferenceException异常时NullValue属性已启用
T115976 -数字都显示不正确的阿拉伯文化时的FlowDirection是从右至左
T109251 – ProgressBarEdit内容的行为与13.2.9改变
DXGrid(XPF通用)

T112468 -单元格的文本是不可见的黑暗主题时,轻巧使用模板
DXGrid为WPF

T112946 – DXGrid出口-当有一个固定带标题栏对齐
T114535 -当GridColumn.CellStyle用于优化模式所强调的行缺少垂直线
T115279 -资源未找到与Datagrid的V14.1
T113734 -如预期般在轻量级网格模式的某些文字设置不起作用
T108739 -如果SearchPanelFindMode被设置为“FindClick”的SearchPanel滤波器不能被清除
DXMap为WPF

T112209 -选择地图元素不是在其他元素之上显示
DXNavBar为WPF

T105257 -隐藏NavBarGroup成为加入NavBarItem它后显示
T110824 – NavBarControl产生被关闭后,“从类型不能转换”
Q570570 – SideBarView在NavBarControl显示多点触摸面板上的古怪行为
T114065 – NavigationPaneView的IsOveflowPanelVisible和IsSplitterVisible属性不能被设置为false
T107186 -该NavBarItem.Select事件永远不会触发
T117615 -在Office 2010中银主题适用于不正确的前景色到ExplorerBarView的项目
DXPrinting为WPF

T116543 – “值不能为空,参数名:值”,当最终用户试图通过电子邮件发送а网格控件显示消息
DXPropertyGrid为WPF

T107019 -一个自定义的TypeConverter工作不绑定到一个集合属性PropertyDefinition
T105921 -添加到项目集合太慢
Q586269 -编辑XPCollection项DXPropertyGrid时抛出NullReferenceException异常
T107596 – NullReferenceException异常,而在PropertyGrid中编辑列表的值
Q557509 -当用户更改的ArcScaleMarkerOptions财产PropertyGrid控件会引发异常
T116999 – PropertyGridControl -改变SelectedItem属性会导致内存泄漏
Q579745 -设置SelectedObject为null不明确PropertyGridControl
Q577689 -创建一个单元格编辑器时,TypeConverter.GetStandardValues ??方法不考虑
DXRibbon(XPF通用)

T106049 -该RibbonGalleryBarItem长相丑陋的office2013主题
DXRibbon为WPF

T112318 -恢复布局后RibbonPage不增加新项目
DXScheduler为WPF

T115460 – ThemeEditor关闭预览窗口后,抛出一个异常
T114217 – WorkWeekView DeferredScrolling工具提示使用一次后破
DXSpreadsheet为WPF

T113632 -滞后显示的第一个上下文菜单
T112601 – SpreadsheetControl不会引发ActiveSheetChanging和ActiveSheetChanged事件时,积极的纸张正在被改变
eXpressApp框架

T113270 -安全- ASPxCheckedListBoxEditor未设置为默认成员属性
S173611 – Security.Integrated和中间层-这是不可能保存对象,有非空的属性限制访问
T118054 -选择一个弹出而在全屏模式下会导致不正确的渲染
T114353 -该DevExpress.ExpressApp.PivotChart.Web.v14.1.resources.dll卫星组件未纳入安装
T107645 – TreeListEditor -的DetailView和ListView之间的同步问题
T111533 – WebLayoutManager丝毫不掩饰的列表属性编辑器,在编辑模式下,当车主布局组ID比编辑器的ID不同
安装(。net)

T107192 -了devexpress菜单扩展-性能问题,如果安装了ReSharper的扩展
T113936 – “添加项目了devexpress”上下文菜单项是错过了在Visual Studio 2013更新2
布局为Windows 8的XAML

B218220 – LayoutItem -无法更改标题前景
T115011 – SlideView -不正确的滚动时填充设置
PDF处理(通用)

T113786 -解析-放在字符串数组不加密
T114067 -解析-浏览器不能用含有文本字段为零最大长度一个互动的形式打开文档
T115643 -解析-浏览器崩溃,如果文档中包含一个布尔值的字典作为最后一个元素
T112528 -渲染- TrueType字体与特定的“失水”字体表不会呈现
PDF浏览器

T114471 -解析-浏览器不能用了不正确的DateTime格式打开文档
T113564 -渲染-该CID的TrueType字体用在’CMAP“表不正确的字形顺序不会呈现
T115778 -该PdfPage.PrefferedZoomFactor属性应该被重新命名为PreferredZoomFactor
T113726 -可用性-添加一个事件来通知查找窗口中打开状态
PDF浏览器为WPF

T114043 – PDFViewerControl不允许在代码隐藏设置DocumentSource
PivotGrid核心

B255383 – PivotGrid -错误,同时显示在数据区可为空<DateTime>领域
项目向导

B255407 -插入扩展向导-这是不可能的选择是不是设在“控制器”一个控制器文件夹
报表服务器

T115003 -设置/服务器-当安装在一个自定义位置更新到新版本失败
T113596 -当SQL Server 2005上安装升级到14.1版本失败
T116779 -网络- “消息页脚”电子邮件模板不能更新或升级报表服务器版本后重置
的ReportViewer为ASP.NET

T100938 – ASPxDocumentViewer -该ReportViewer.Refresh方法文件后不工作是由ASPxUploadControl上传
丰富的编辑文件服务器

T113249 -文件服务器库中的MVC – RichEdit中-文件转换演示失败,出现未处理的异常
捕捉

T111921 – DataExplorer显示编辑计算字段菜单嵌套对象
电子表格文件服务器

T114925 -该SpreadsheetControl抛出NullReferenceException异常,而从工作表复制数据包含图表
XtraBars套房

T117551 -运用溶解过渡到控制导致错误:“试图除以零”
T111213 – BarDockControl – MouseUp事件不会触发
Q538421 – DockManager的DXValidationProvider防止活动标签的变化
T114793 -文件管理- WidgetView -布局不保存
T112861 -文件-步骤2 -码头经理,错字- DocumentManager代替DockManager
T114175 – DocumentManager – IsSelectedChanged不引发文件恢复配置时失去选择
B255549 – FalyoutPanel对接的父文档后,仍然在其第一位置
T110798 -飞出-第一个对话框没有如果两个或多个对话框显示响应
Q587907 – FlyoutPanel在多个文件不在位
T114989 -福克斯没有激活面板
T117671 -这是不可能的OfficeNavigationBar.SelectedItem财产通过Visual Studio的属性网格设置
T115548 – OfficeNavigationBar -在某些外观不正确的导航链接画
T116844 -打开TileNavPane的设计师删除事件处理程序在VB工程
T112787 -色带控制- DrawGroupsBorder属性并不在13.2版工作
T118459 -磁砖控制VB的演示未编译
T114176 -该TilebarDropDownContainer宽度不能当TileBar的方向是垂直的规定
Q588382 – TileControl -本TileItem.ItemClick不会引发事件,如果TileControl是右键单击事先
T110685 -当使用的DockPanel和Documentmanager,面板内容消失
T111363 – WidgetView – -未将对象引用设置到对象的实例
T115097 -自动换行不工作在弹出的说明
XtraCharts套房

T116145 – “文件***不能在设计师在创建或调试修改。” 设计时错误建立一个项目时,
T114464 -轴范围-该VisualRange.SideMarginsValue属性不是有效的在某些情况下
T112516 -在同类参数值点都加在任意的顺序手动缩放模式数据聚合不起作用
T114838 – RangeControl抛出’System.ArgumentException’时附加到图表的日期时间尺度改变其SelectedRange物业日期时间值
T114396 -侧并排系列-未处理的错误(初始化ArgumentOutOfRangeException)显示一个十字线面板,使数据汇总时,
B253658 -在缩放操作慢十字线面板性能
T114282 -堆叠面积和线路系列-当一个点在系列中的零值,而其他点是不正确的负面图表布局
T114350 -该DevExpress.Sparkline.v14.1.Core.resources.dll卫星组件未纳入安装
T113658 -隐藏SeriesBase.SyncronizePointOptions财产不应被序列化
T115349 -无法删除WebChartControl网页上在设计模式
T114678 -当一个图表连接到RangeControl零界未处理的异常
T116658 – WebChartControl -在’DateTimeOptions’属性不能以声明方式设置,升级到v 2014年1月3日之后
T113552 – XtraReports -如果计算的领域被指定为一个图表系列中的value属性图表向导崩溃
XtraEditors库

Q582789 -动画闪光效果添加动画时,在运行时
T114967 -复选框焦点矩形部分画
T114393 -文件-添加注释,默认ListBoxControl.HighlightedItemStyle属性值的改变v14.1.3
T117517 -如果的TransitionManager被添加到其中无标题标签显示页面,转换过程中发生错误的TabControl
T115329 -在TokenList模式TokenEdit的不正确行为
T113100 -键盘导航开始从第一个项目,而不是最后选择了一个
T113163 -的MailClient演示- TokenEdit弹出取出令牌后没有关闭
T114533 – SearchControl -无法更改NullValuePrompt属性
T115996 – SearchControl -客户端属性是在智能标签窗口失踪
T113689 – SplashScreenManager构造函数定义消失
T117142 – TokenEdit -如何重置编辑值
T115099 – TokenEdit -令牌不能正确识别,如果它的描述包含空格
T115101 -如果他们被分配到在代码中的EditValue财产TokenEdit显示标记的值作为一个字符串
T116134 – TokenEdit分配对象的列表来的EditValue后显示错误的文本,如果编辑模式=列表
T114501 – TokenEditValidateTokenEventArgs不匹配的在线文档
T116118 -的TransitionManager – NullReferenceException异常快速切换XtraTabControl标签时
T111501 -的TransitionManager抛出一个异常:“对象是目前在其他地方使用。”
XtraGauges套房

T113751 – NullReferenceException异常增加的XRGauge控制下的非英语语言环境报告书时,
XtraGrid中套房

T115121 – AdvBandedGridView -摘要只显示为列的第一行
B255572 -数据源配置向导-一些Entity Framework数据模型没有在列表中显示
T110392 – DataWizard不填充操作符添加到代码的第一次
T110105 -当ListChanged事件引发法师行倒塌
T117714 – RowDeleted事件引发不一致的类型参数
T115015 -该AllowMove,AllowChangeColumnParent,AllowBandMoving和其他选项是有效的无论是在运行时和设计时
T112836 -当GridView控件是不可编辑的,它仍然有可能打开一个EditForm
T113846 – XPServerCollectionSource – InvalidCastException的来自新项目行移动焦点后
T115154 – XtraGrid中右边框油漆问题
XtraLayout套房

T112731 -无法点击LayoutControl的上下文菜单中的项目
T114178 – LayoutControl -当放置到一个LayoutControl用户控件增加它的大小
XtraMap

T112254 -从以前的会话缓存切片不能在某些情况下被加载
T116227 -在运行时添加地图项目未正确初始化,如果VectorItemsLayer.Data属性将它们添加到MapItemStorage后更新
T114351 -该DevExpress.Map.v14.1.Core.resources.dll卫星组件未纳入安装
XtraNavBar

T109634 – NavBarControl -在“SkinNav:设计了devexpress”的风格是不正确应用
XtraPrinting库

T112506 -俄语翻译不正确的页面设置对话框布局
T115084 – PrintEditorForm -在法语语言环境中lbDocumentsInQueueCaption标签相交lbPrinterDocumentsInQueue 1
XtraReports套装软体

T108885 -带控件重新定位不正确时XRSubreport.CanShrink属性为False如果这XRSubreport被放置到同一个乐队
T115841 – “无法开始创建一个文档,而另一个文件被创建’上Report.ShowRibbonPreview异常
T107293 -文档:更新了“如何:使用报告模板编辑器”帮助主题-报告模板编辑器不能在开始菜单中找到
T113876调用CreateDocument(true)方法时出现异常传递报告到的DocumentViewer如果DocumentViewer.RequestDocumentCreation属性已启用前-
T114489 -与图元文件报告中XRPictureBox不能正确导出为PDF
T114346 -该DevExpress.Xpf.ReportDesigner.v14.1卫星组件未纳入安装
T115189 -报表向导使用动词的“在报表向导设计”没有一个选项,选择报表类型调用
T115583 -该ReportTemplateEditor.exe文件在14.1 DXperience安装失踪
T115395 -该XRTableOfContents高度ReportUnit属性设置为TenthsOfAMillimeter时意外增大
Q588421 – XtraReports最终用户-设计师-存在的计算字段IDisplayNameProvider力参数名称有无效的前缀
XtraRichEdit

T114491 -如果邮件合并时开始的形式是不可见但文件没有正确地合并
T108584 -从一个文件用CTRL + X选择与它切割表时不删除
XtraScheduler套房

T114833 -而缩放TimelineView和GanttView引发ArgumentOutOfRangeException如果约会是由资源分组
T106448 -提示窗口恢复预约后不显示
Q569014 -调度报告- VerticalResourceHeaders和TimelineCells未正确下分页符对齐
XtraSpreadsheet

T114719 -自定义格式的结果看起来不同的SpreadsheetControl,并在MS Excel文档
T116255 -例外添加新列到电子表格与指定的标签时,
T109889 -冷冻和隐藏的行滚动时行随机消失
T114796 – SpreadsheetControl正常操作,与一些实时数据服务器,同时计算RTD函数
T114335 -按下鼠标右键时SpreadsheetControl.SelectionChanged事件不叫
T112990 -邮件合并模板文档的页面设置将在生成的文档中忽略
T115230 -裹文字不会在SpreadsheetControl打印预览正确绘制
T116026 -零值显示不正确地在电子表格中单位为V 14.1
XtraTreeList套房

T115039 – TreeList中忽略FindNullPromt
XtraVerticalGrid套房

T111479 – PropertyGridControl -本ScrollVisibility.Horizontal和ScrollVisibility.Both值显示,但它们不在效果
Q580340 -提供VGridControl同等物业EnableAppearanceFocusedRow

 

发表在 C# | 标签为 , , , , | 留下评论

分解加密块,匿名块什么的,支持天正

直接ap加载对应的ARX程序,各文件夹对应不同的CAD版本,Sys16对应CAD2004~2006,sys17对应CAD2007~2009,sys18对应CAD2010~2012,Sys19对应CAD2013~2014 命令列表(括号内为命令名) 1、高级分解(YJT_GJFJ),分解天正加密保护对象、多重块插入块及外部参照块等 2、单键快捷(YJT_DJKJ),比Autohook更好用的单键快捷功能的设置命令,支持各种组合键 3、热键开关(YJT_RJKG),单键快捷的开关命令,方便临时关闭或打开单键快捷

提供cad2006 2007 2008版本下载地址,戳下面吧,你懂的!

sys17

发表在 CAD实用软件 | 标签为 | 留下评论

帮网友玩的一个模具设计工具,免费工具箱upaarx,懂的入

前些天有网友叫玩一个小工具,用来做模具的,感觉很强大,发上来与兄弟们共享,有用的拿走。演示了这个,还有很多命令,很强大,自己去玩吧

下载地址戳下面888

888

 

发表在 CAD实用软件 | 标签为 | 留下评论