ATL控件Picture属性赋值方法

翻译|其它|编辑:郝浩|2005-06-07 09:32:00.000|阅读 1237 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


ATL控件Picture属性赋值方法 


程序代码如下所示:

//接口函数
STDMETHODIMP CObj::init()
{
    // TODO: Add your implementation code here
    initPic(m_pPicture,"F:\\obj.bmp");

    return S_OK;
}

//初始化m_pPicture的函数
void CObj::initPic(CComPtr<IPictureDisp> &pPicture,LPCTSTR path)
{
   using namespace std;

   long cb;

     fstream file(path, ios_base::in);
      
     file.seekg(0, ios::end);
    
     cb = file.tellg();

   CComPtr<IStream> pStm;
HGLOBAL hGlob = GlobalAlloc(GHND, cb);
LPVOID pvData = NULL;
if (hGlob )
  {
     if ((pvData = GlobalLock(hGlob )) != NULL)
      {
        file.seekg(0,ios::beg);
           file.read((char*)pvData,cb);
         GlobalUnlock(hGlob );
      CreateStreamOnHGlobal(hGlob , TRUE, &pStm);
   }
}
m_pPicture = NULL;
OleLoadPicture(pStm,cb,FALSE,IID_IPictureDisp,(LPVOID*)&m_pPicture);
pStm.Release();
GlobalFree(hGlob );
file.close();

   this->m_bRequiresSave = TRUE;
   this->FireOnChanged(DISPID_PICTURE);
   this->FireViewChange();
}

//绘制图片的函数
void CObj::drawPic(ATL_DRAWINFO& di)
{
  RECT& rc = *(RECT*)di.prcBounds;
  LPPICTURE pPict ;
  DWORD dwAttr ;
  OLE_XSIZE_HIMETRIC cxSrc;
  OLE_YSIZE_HIMETRIC cySrc;
if ((m_pPicture != NULL) &&SUCCEEDED(m_pPicture->QueryInterface(IID_IPicture, (LPVOID*)&pPict)))
 {
    pPict->get_Attributes(&dwAttr);
    if(dwAttr==S_OK)
   {
      pPict->get_Width(&cxSrc);
      pPict->get_Height(&cySrc);
      pPict->Render(di.hdcDraw,rc.left, rc.top, rc.right, rc.bottom,0,0,cxSrc,cySrc,&rc);
     }
   }
}

// 
HRESULT OnDraw(ATL_DRAWINFO& di)
{
    RECT& rc = *(RECT*)di.prcBounds;
        Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);

          SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);
        LPCTSTR pszText = _T("ATL 3.0 : Obj");
      TextOut(di.hdcDraw,
    (rc.left + rc.right) / 2,
  (rc.top + rc.bottom) / 2,
  pszText,
lstrlen(pszText));

drawPic(di); //通过这句绘制

return S_OK;
}
 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP