尼玛,要不是大雨被困在公司,这个问题永远搞不出来了,困扰我一个星期了!!!!!!!
一个星期前就知道实现的思路,把文字注记的方向设为竖直,因为有个帖子也讨论过这个问题,给了思路,但是我写了代码就是不行。
原来的代码如下:
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还是区别开来用比较好