AO+C++实现文字注记方向为竖直

来源:互联网 发布:洞主卖香皂的淘宝店 编辑:程序博客网 时间:2024/05/29 09:58

   尼玛,要不是大雨被困在公司,这个问题永远搞不出来了,困扰我一个星期了!!!!!!!

   一个星期前就知道实现的思路,把文字注记的方向设为竖直,因为有个帖子也讨论过这个问题,给了思路,但是我写了代码就是不行。

   原来的代码如下:

ICharacterOrientationPtr iporientation;ipTextSymbol->QueryInterface(&iporientation);iporientation->put_CJKCharactersRotation(true);ipTextSymbol->put_Angle(dAngle);  //dAngle为-90.


 

这个代码在ESRI上问了好久也没人能说出来哪里错了,我是各种方法都试过了,就在刚刚想放弃的时候,我又试了一下把true改成VARIANT_TRUE类型试一下。奇迹出现了!!!!!

ICharacterOrientationPtr iporientation = ipTextSymbol;//一定要用这个变量来赋值VARIANT_BOOL truebool = VARIANT_TRUE;iporientation->put_CJKCharactersRotation(truebool);ipTextSymbol->put_Angle(dAngle);ipTextElement->put_Symbol(ipTextSymbol);


好吧。。。这个班总算没白加!!!

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

上次刚加班完写下这点东西,也没深究到底为什么true就不行,为什么VARIANT_TRUE就可以,两个有什么却别呢?

今天回过头来翻了一下资料,果然两者是不一样的!

bool型与BOOL型

这两个有微小的区别,bool的变量时byte型(一个字节的长度),而BOOL是int型(四个字节的长度)。这个问题不大,都是定义了true为1,false为0.

下面是代码中afx.h中的定义

#define FALSE   0#define TRUE    1#define NULL    0


 

VARIANT_BOOL型

我们可以转到定义看一下VARIANT_TRUE和VARIANT_FALSE的定义:

#define VARIANT_TRUE ((VARIANT_BOOL)-1)#define VARIANT_FALSE ((VARIANT_BOOL)0)

 

看到了吧,区别就是VARIANT_TRUE被定义为-1了,而不是1!

 

所以碰到判断0与非0的情况,bool与VARIANT_BOOL还是通用的,显然,我上面代码中put_CJKCharactersRotation这个函数的判断不是这样的!

我也在代码中试过将truebool变量赋值1,-1来测试,结果只有-1文字方向才是会改变的。

所以以后碰到bool与VARIANT_BOOL还是区别开来用比较好

 

参考文章:http://wk.baidu.com/view/c858f0f90242a8956bece473?from=&ssid=&bd_page_type=1&uid=bk_1342984874_752&pu=sl%401%2Cpw%403000%2Csz%40224_220%2Cpd%401%2Cfz%402%2Clp%402%2Ctpl%40color&pn=1&st=1&set=num

 

原创粉丝点击