默认头像
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:4424回复:13

VC+AE中如果给IPAGELAYOUTCONTROL中增加文字

楼主#
更多 发布于:2007-09-02 13:27
我在给IPAGELAYOUTCONTROL中增加文字,用下面的代码在最后面出错,估计是接口转换问题,那为朋友给看看:(vb的代码可以通过)<br>IElementPtr pElement(CLSID_TextElement); <br>ITextElementPtr pTextElement = pElement; <br>ITextSymbolPtr pTextSym(CLSID_TextSymbol); <br>BSTR bstrText; <br>bstrText = CComBSTR("Text"); <br>IGeometryPtr pGeom; <br>pGeom = pEnv.GetInterfacePtr(); <br><br>pElement->put_Geometry(pGeom); <br>pTextElement->put_Text(bstrText); <br>pTextElement->put_Symbol(pTextSym); <br><br>VARIANT varGeom; <br>varGeom.punkVal = (IUnknownPtr)pGeom; <br>VARIANT varTextSym; <br>varTextSym.punkVal = (IUnknownPtr)pTextSym; <br>VARIANT varText; <br>varText.bstrVal = CComBSTR("Text1"); <br>VARIANT varElem; <br>varElem.punkVal = (IUnknownPtr)pElement; <br>m_PageLayoutCtrl.AddElement(pElement,varGeom,varTextSym,varText,0);//执行错误<br><br>m_PageLayoutCtrl.Refresh(esriViewGraphics,varElem,varGeom); <br>
[此贴子已经被作者于2007-9-17 15:27:33编辑过]
喜欢0 评分0
默认头像
路人甲
路人甲
  • 注册日期2007-10-30
  • 发帖数11
  • QQ
  • 铜币144枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-12-27 09:06

我想对输出的文字进行编辑,ITexeSymbolEditor有一个EditorTextSymbol方法,显示文字编辑对话框,可是vb中可以,vc中就不显示。是怎么回事呢?

这句话我的代码是hr=pTextSymbolEditor->EditTextSymbol(;pTextSymbol,m_pPageLayoutControl.GetHWnd(),;m_bok);  

还想问下gzstyxb仁兄,代码中的dlg.m_lfFont.lfFaceName,dlg是自定义的对话框么,要怎么做,怎么做那些字体类型之类的东西呢?

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2007-11-07 09:07
还有,我想问如果要对输入文本进行编辑,应该怎么做呢?
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2007-11-06 17:02

嗯  可以在上面添加文字了

我错在:在IPageLayout 接口对象(pPageLayout)上添加  

正确的应该是在:和控件相连的变量(m_ipPageLayout)上添加对象

这两个不都是对控件的操作么?有什么区别呢

还有我觉得那个AO的帮助文档解释的很是不清楚 或者就是我理解能力不够

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2007-11-06 15:49

对于文本输入我的方法是:

弹出一个对话框,输入文字,但是少于13个字符时,它都显示为FNT呢?

奇怪

代码为:

CTextDlg  textdlg;
textdlg.DoModal();
CString   m_text;
m_text=textdlg.m_textedit;
BSTR   text=_bstr_t(m_text);  

不知道是不是_bstr_t类型转换的原因,哪位高手知道呢?

谢谢哈

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2007-11-06 15:46

还有一个要注意的问题是:


pTextElement->put_Text(bstrText);
pTextElement->put_Symbol(pTextSym);

一定要放到pElement->put_Geometry(pGeom);这句话之后

我理解的是,要先确定位置,不知道对不对

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2007-11-06 13:48
可以的,我上面那就是先打开mxd文件,然后在pagelayout里面加文字,上面已经有代码了
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2007-11-06 10:05

我知道 我那段代码 没能输出文本的原因在于没有确定包络多边形 是吧?

现在可以输入文字了

可是如果我在控件中先添加一个mxd文件,再添加文字的话,为什么文字就不出现了呢?

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2007-11-06 09:11
呀 先谢谢哈:)
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-09-22
  • 发帖数358
  • QQ
  • 铜币1045枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2007-11-05 17:43

     CComPtr pFont;

     HRESULT hr= CoCreateInstance(CLSID_StdFont, NULL, CLSCTX_ALL, IID_IFontDisp, (void **);pFont);

     _ASSERTE(SUCCEEDED(hr));

     

     IFontPtr ipFont;

     pFont->QueryInterface(IID_IFont, (void **);ipFont);

     _ASSERTE(pFont);

     ipFont->put_Name(CComBSTR(dlg.m_lfFont.lfFaceName));

     ipFont->put_Underline(dlg.m_lfFont.lfUnderline);

     ipFont->put_Bold(dlg.m_lfFont.lfItalic);

     IFontDispPtr ipFontDisp = ipFont;

     ISimpleTextSymbolPtr textSymbol(CLSID_TextSymbol);

     ITextElementPtr txtElem(CLSID_TextElement);

     textSymbol->put_Font(ipFontDisp);

     textSymbol->put_Size(dlg.m_lFontSize);

     textSymbol->put_HorizontalAlignment(dlg.m_horizAlignment);//);

     textSymbol->put_VerticalAlignment(esriTVACenter);

     IColorPtr ipColor(CLSID_RgbColor);

     ipColor->put_RGB(dlg.m_crFontColor);

     textSymbol->put_Color(ipColor);

     

     txtElem->put_ScaleText(VARIANT_FALSE);    // VARIANT_FALSE表示文字随图形放大而放大

     txtElem->put_Text(CComBSTR(dlg.m_strData)); //

     txtElem->put_Symbol(textSymbol);

     

     IElementPtr element = txtElem;

     element->put_Geometry(ipGeometry);

     ipGraphicsContainer->AddElement(element, 0);

由爱故生忧, 由爱故生怖. 若离于爱者, 无忧亦无怖.
举报 回复(0) 喜欢(0)     评分
上一页
默认头像

返回顶部