如何获取对象值

How get object value?

本文关键字:取对象 何获      更新时间:2023-10-16

我的程序必须通过#import指令与另一个程序通信。它创建了一个新文档,并将TextFrame与默认参数

放在上面。
HRESULT hr = CoInitialize(NULL);
_ApplicationPtr myApp("InDesign.Application");
DocumentPtr myDoc = myApp->ActiveDocument;
PagePtr myPage = myDoc->Pages->Item[1L];
TextFramePtr myTextFrame = myPage->TextFrames->Add(); // create frame on Page
TextFramePtr myTextFrame_2 = myPage->TextFrames->Item[2L]; // Get second frame on Page;

TextFrame对象有方法GeometricBounds来改变帧的大小。下面是我设置帧大小的代码:

double mySize[4] = {12.7, 12.7, 66.7, 83.2};
SAFEARRAY * Bound;
VARIANT Array;
Array.vt =   VT_ARRAY | VT_R8;
Bound = SafeArrayCreateVector(VT_R8, 1, 4); 
for (int i = 0; i < 4; i++)
{
long index = i + 1;
SafeArrayPutElement(Bound, &index, &mySize[i]); 
}
Array.parray = Bound; 
myTextFrame->GeometricBounds = Array;

这是我创建的框架,但我怎么能得到另一个框架的大小,已经存在于文档中?

Property GeometricBounds As Variant TextFrame的边界,不包括笔画宽度,格式为[y1, x1, y2, x2],它给出了边界框的左上角和右下角的坐标。

TLB文件中方法的描述:

Frame : IDispatch
{
// Property data
__declspec(property(get=GetGeometricBounds,put=PutGeometricBounds))
_variant_t GeometricBounds;
...
// Methods: 
void PutGeometricBounds (
const _variant_t & _arg1 );
_variant_t GetGeometricBounds ( );
....
}

访问SAFEARRAY的元素需要调用:

  • SafeArrayGetLBound:返回安全数组的任何维度的下界。
  • SafeArrayGetUBound:返回安全数组的任何维度的上界。
  • SafeArrayGetElement:检索数组中的单个元素。