我想用ATL做activx控件,在 HRESULT OnDraw(ATL_DRAWINFO& di)中,控件的位置和长宽似乎都定了,如果想改动这些参数,该怎么办呢?

解决方案 »

  1.   

    #5 我如何使用手工来控制大小?
    答:你只要重载IOleObject接口的SetExtent方法.// NoteCtl.h : Declaration of the CNoteCtl
    ...
    class ATL_NO_VTABLE CNoteCtl : 
    ...
       STDMETHOD(SetExtent)(DWORD dwDrawAspect, SIZEL *psizel)
       {
          ATLTRACE(_T("SetExtent sizing control to 1000x1000 "));
          psizel->cx = psizel->cy = 1000;
          return IOleObjectImpl<CNoteCtl>::SetExtent(dwDrawAspect, psizel);
       }
    ...
    };#6 我如何重新设置控件的大小?
    void CMyCtrl::SetNewSize (int cx, int cy)
    {
       SIZEL szlPixels, szlMetric;
       szlPixels.cx = cx;
       szlPixels.cy = cy;   AtlPixelToHiMetric(&szlPixels, &szlMetric);
       // IOleObjectImpl
       SetExtent(DVASPECT_CONTENT, &szlMetric);   // update control sizing...
       m_rcPos.right= m_rcPos.left + cx;
       m_rcPos.bottom= m_rcPos.top + cy;
       if (m_spInPlaceSite != NULL) {
          // needed for IE to accept the resizing
          m_spInPlaceSite->OnPosRectChange(&m_rcPos);
       }
       SetFocus();