目前已在richedit中可以插入表示图片的COM,但现在截图转输时,因为网络的延时,所以在图片还没接收完毕用一张临时的图片代替。接收结束后再把实际的图片显示出来。但现在ATL的大小,始终是临时图片的大小,要在怎么改变?请大家帮下忙,谢谢。

解决方案 »

  1.   

    SIZEL szlPixels, szlMetric;
    szlPixels.cx = m_pDrawImg->GetWidth() ;
    szlPixels.cy = m_pDrawImg->GetHeight() ;AtlPixelToHiMetric(&szlPixels, &szlMetric);
    SetExtent(DVASPECT_CONTENT, &szlMetric);我已经在图片重新加载时写了如上代码
      

  2.   

    要通知容器新的大小,然后容器会来向控件请求设置新的尺寸值。
    调用IOleInPlaceSite::OnPosRectChange来告诉容器大小,它会调用你的IOleInPlaceObject::SetObjectRects,此时你就能改变窗口大小了。
      

  3.   

    照你的方法试过了
    IOleClientSite* pClientSite = reo.polesite;
    IOleInPlaceSite* pInPlaceSite=NULL;
    if(SUCCEEDED(pClientSite->QueryInterface(IID_IOleInPlaceSite,(void**)&pInPlaceSite)))
    {
     //重新调整大小
     CRect newRc;
     newRc.left = 0;
     newRc.top = 0;
     newRc.right = 16;
     newRc.bottom = 16;
     hr = pInPlaceSite->OnPosRectChange(&newRc); 
    }hr = pInPlaceSite->OnPosRectChange(&newRc); 执行到这里,总是还回e_nointerface这是什么原因了
      

  4.   

    是不是com要继承IOleInPlaceSite这个接口??
      

  5.   

    site是容器要实现的,组件要实现的是IOleInPlaceObject接口
      

  6.   

    嗯,,已经有了IOleInPlaceObject这个接口,但在richedit中调用hr = pInPlaceSite->OnPosRectChange(&newRc); 还回s_ok,,但是图片大小没有改变,,要在组件中重写SetObjectRects 方法不,,我曾重写过,跟踪调试时,可以跳进来。但是图片还是没有变化大小。达人,这是什么原因啊,,我还是com初学者,问题不免低级