追风浪子
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:4344回复: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
追风浪子
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-09-10 16:14
大家帮忙看看!!!
举报 回复(0) 喜欢(0)     评分
追风浪子
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2007-09-19 11:16
<P> IGeometryPtr pGeom;<BR> pGeom = pEnv.GetInterfacePtr();</P>
<P> pElement->put_Geometry(pGeom);<BR> pTextElement->put_Text(bstrText);<BR> pTextElement->put_Symbol(pTextSym);<BR> <BR> IGraphicsContainerPtr pGraphicsContainer=(IGraphicsContainerPtr)m_PageLayoutCtrl.GetPageLayout(); <BR> IActiveViewPtr pAV = (IActiveViewPtr)m_PageLayoutCtrl.GetPageLayout();</P>
<P> pGraphicsContainer->AddElement(pElement,0);  <BR> pAV->PartialRefresh(esriViewGraphics,(IUnknownPtr)pElement,pEnv); </P>
<P> m_PageLayoutCtrl.Refresh(esriViewGraphics,_variant_t((IUnknown*)pElement), _variant_t((IUnknown*)pGeom));</P>
<P>问题已经解决,代码提供出来</P>
举报 回复(0) 喜欢(0)     评分
htsstone
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2007-11-05 17:09
<P>pGeom = pEnv.GetInterfacePtr();</P>
<P>是什么意思呀?</P>
举报 回复(0) 喜欢(0)     评分
htsstone
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2007-11-05 17:13
<P>void CMxdtestView::OnAddText() <BR>{<BR> // TOD Add your command handler code here<BR> HRESULT  hr;<BR> CTextDlg textdlg;<BR> textdlg.DoModal();<BR> CString  sText;<BR>    sText=textdlg.m_Text;<BR> BSTR  text;<BR> text=(_bstr_t)(sText);  //获得文字<BR>    </P>
<P> ITextSymbolPtr   pTextSymbol(CLSID_TextSymbol);<BR> hr=pTextSymbol->put_Text(text);<BR>    if (FAILED(hr)) return;<BR> <BR>    ITextSymbolEditorPtr  pTextSymbolEditor(CLSID_TextSymbolEditor);<BR> LONG  hwnd;<BR> m_ipPageLayoutControl->get_hWnd(;hwnd);<BR>// hr=pTextSymbolEditor->EditTextSymbol(;pTextSymbol,hwnd,;m_bOK);   //设计文字</P>
<P>// if (FAILED(hr)) return;<BR>    IElementPtr pElement(CLSID_TextElement); <BR>    ITextElementPtr pTextElement = pElement;  <BR> <BR>    pTextElement->put_Text(text);<BR> pTextElement->put_Symbol(pTextSymbol);<BR> <BR>    IGraphicsContainerPtr pGraphicsContainer(CLSID_PageLayout);<BR> pGraphicsContainer=(IGraphicsContainerPtr)m_ipPageLayout;</P>
<P> IActiveViewPtr pAV = (IActiveViewPtr)m_ipPageLayout;</P>
<P>    <BR> pGraphicsContainer->AddElement(pElement,0);  <BR>  //  pAV->PartialRefresh(esriViewGraphics,(IUnknownPtr)pElement,pEnv);<BR> m_ipPageLayoutControl->Refresh(esriViewGraphics,_variant_t((IUnknown*)pElement));<BR> </P>

<P>为什么我的没有文字出现呢 ?错在哪里呢?</P>
<P>麻烦哪位高手指点下</P>
举报 回复(0) 喜欢(0)     评分
gzstyxb
路人甲
路人甲
  • 注册日期2004-09-22
  • 发帖数358
  • QQ
  • 铜币1045枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2007-11-05 17:43
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      CComPtr<IFontDisp> pFont; <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      HRESULT hr= CoCreateInstance(CLSID_StdFont, NULL, CLSCTX_ALL, IID_IFontDisp, (void **);pFont); <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      _ASSERTE(SUCCEEDED(hr)); <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      IFontPtr ipFont;<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      pFont->QueryInterface(IID_IFont, (void **);ipFont);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      _ASSERTE(pFont); <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      ipFont->put_Name(CComBSTR(dlg.m_lfFont.lfFaceName));<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      ipFont->put_Underline(dlg.m_lfFont.lfUnderline);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      ipFont->put_Bold(dlg.m_lfFont.lfItalic);<p></p></FONT></P>
<P 0cm 0cm 0pt"><p><FONT face="Times New Roman"> </FONT></p></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      IFontDispPtr ipFontDisp = ipFont;<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      ISimpleTextSymbolPtr textSymbol(CLSID_TextSymbol);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      ITextElementPtr txtElem(CLSID_TextElement);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      textSymbol->put_Font(ipFontDisp);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      textSymbol->put_Size(dlg.m_lFontSize);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      textSymbol->put_HorizontalAlignment(dlg.m_horizAlignment);//);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      textSymbol->put_VerticalAlignment(esriTVACenter);<p></p></FONT></P>
<P 0cm 0cm 0pt"><p><FONT face="Times New Roman"> </FONT></p></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      IColorPtr ipColor(CLSID_RgbColor); <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      ipColor->put_RGB(dlg.m_crFontColor);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      textSymbol->put_Color(ipColor);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      txtElem->put_ScaleText(VARIANT_FALSE);    // VARIANT_FALSE</FONT>表示文字随图形放大而放大<p></p></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      txtElem->put_Text(CComBSTR(dlg.m_strData)); // <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      txtElem->put_Symbol(textSymbol);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      <p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      IElementPtr element = txtElem;<p></p></FONT></P>
<P 0cm 0cm 0pt"><p><FONT face="Times New Roman"> </FONT></p></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      element->put_Geometry(ipGeometry);<p></p></FONT></P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">      ipGraphicsContainer->AddElement(element, 0);<p></p></FONT></P>
由爱故生忧, 由爱故生怖. 若离于爱者, 无忧亦无怖.
举报 回复(0) 喜欢(0)     评分
htsstone
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2007-11-06 09:11
呀 先谢谢哈:)
举报 回复(0) 喜欢(0)     评分
htsstone
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2007-11-06 10:05
<P> 我知道 我那段代码 没能输出文本的原因在于没有确定包络多边形 是吧?</P>
<P>现在可以输入文字了 </P>
<P>可是如果我在控件中先添加一个mxd文件,再添加文字的话,为什么文字就不出现了呢?</P>

<img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
追风浪子
路人甲
路人甲
  • 注册日期2004-06-08
  • 发帖数166
  • QQ
  • 铜币782枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2007-11-06 13:48
可以的,我上面那就是先打开mxd文件,然后在pagelayout里面加文字,上面已经有代码了
举报 回复(0) 喜欢(0)     评分
htsstone
路人甲
路人甲
  • 注册日期2006-03-21
  • 发帖数22
  • QQ
  • 铜币158枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2007-11-06 15:46
<P>还有一个要注意的问题是:</P>
<P><BR>pTextElement->put_Text(bstrText);<BR>pTextElement->put_Symbol(pTextSym);</P>
<P>一定要放到pElement->put_Geometry(pGeom);这句话之后 </P>
<P>我理解的是,要先确定位置,不知道对不对</P>

举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部