阅读:3667回复:17
Mo,VB转VC关于Renderer
<P>我想把一段VB程序翻译成VC程序,翻译下段时遇到问题</P>
<P>Dim lyr As MapObjects2.MapLayer</P> <P>.......</P> <P> Select Case True Case lyr.Renderer Is Nothing ...... Case TypeOf lyr.Renderer Is MapObjects2.ValueMapRenderer ....... Case TypeOf lyr.Renderer Is MapObjects2.ClassBreaksRenderer ....... End Select</P> <P>请问我在VC中怎么才能得知一个图层的Renderer是否为Nothing,如何得到一个图层Renderer的类型(例如,是ValueMapRenderer还是ClassBreaksRenderer)?</P> <P>请多多指教,最好能给出关键代码,先行谢过!</P> [此贴子已经被作者于2004-9-20 14:49:03编辑过]
|
|
1楼#
发布于:2004-09-22 09:45
<P>自己顶一下</P><img src="images/post/smile/dvbbs/em15.gif" />
|
|
2楼#
发布于:2004-09-22 09:51
<P>很久没装mo玩了,只能帮顶下先</P><P>不知道Renderer有type属性吗?</P><P>都try一下,看看如何获得啦</P>
|
|
|
3楼#
发布于:2004-09-22 14:56
Nothing在VC中是NULL,类型在做的时候你就要自己记录了。
|
|
|
4楼#
发布于:2004-09-23 10:07
<P>请楼上两位看看,程序运行时只能得到lyr,得不到Renderer的类型,所以好像无法自己记录啊。只能通过上边的语句获得吧?</P><P>我看VC中有这么一个函数lyr.GetRenderer()->GetTypeInfo(UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo)</P><P>很像是用来获得Renderer的类型的,可我弄了好长时间也没弄明白,还请高手指教。</P>
|
|
5楼#
发布于:2004-09-23 11:12
你在生成专题的时候记录啦!这个函数没用过,我也用用试试。
|
|
|
6楼#
发布于:2004-09-23 14:24
LPDISPATCH lpDisp=m_layer->GetRenderer();
HRESULT hr=lpDisp->QueryInterface(IID_GetRenderer,...); if(SUCCEEDED(hr)) { ... } 还是先看看COM吧 |
|
7楼#
发布于:2004-09-23 14:35
如果用 pdisp->GetTypeInfoCount(;icount);得到的icount为0,这是因为该对象不提供类型信息,只能用QueryInterface的原始方法来判断.
|
|
8楼#
发布于:2004-09-23 15:09
<P>请楼上看一下,小弟未学过COM,VC也是刚刚起步,还请多多指教。</P><P><B>HRESULT QueryInterface( REFIID</B><I> <a href="" target="_blank" >iid</A></I><B>,</B><B> void </B>**<EM> </EM><a href="" target="_blank" ><EM>ppvObject</EM></A><b>);</b>函数中第二个参数是用来存放指向Renderer类型的指针吗?应该怎样定义啊?还有,是当ppvObject==NULL时对应lyr.Renderer Is Nothing吗?还是hr==E_NOINTERFACE 与之对应啊?在if语句中又是怎么样判断是什么类型的呢?</P><P>实在因为是急用,迫不得已,还烦请给出详细一点的代码。</P><P>小弟日后一定会好好看书自己得出答案的!</P>
|
|
9楼#
发布于:2004-09-23 16:27
<P>#define SIMPLESYMBOL 1
#define VALUERENDERER 2 #define CLASSRENDERER 3</P><P>UINT CDrawLayer::GetRendererType() { //仅列出两种易于在图例上表达的着色方法 const IID IID_IValueMapRenderere = {0x9BD6A670, 0xCE75, 0x11D1, {0xAF, 0x04, 0x20, 0x4C, 0x4F, 0x4F, 0x50, 0x20}};</P><P> const IID IID_IClassBreaksRenderer = {0x9BD6A676, 0xCE75, 0x11D1, {0xAF, 0x04, 0x20, 0x4C, 0x4F, 0x4F, 0x50, 0x20}};</P><P> LPDISPATCH lpDisp = m_layer.GetRenderer(); if (!lpDisp) { return SIMPLESYMBOL; } else { IUnknown* pTemp; LPDISPATCH pDispTemp = NULL; HRESULT hrValue = lpDisp->QueryInterface (IID_IValueMapRenderere, (void**);pTemp); HRESULT hrClass = lpDisp->QueryInterface (IID_IClassBreaksRenderer, (void**);pTemp); lpDisp->Release (); lpDisp->Release (); if (SUCCEEDED(hrValue)) { return VALUERENDERER; } else if (SUCCEEDED(hrClass)) { return CLASSRENDERER; } else { return SIMPLESYMBOL; } } }</P><P>以上代码尚未编译验证;</P> |
|
上一页
下一页