/*此文是我将网上的一些文章,自已遇到的问题进行整理,有些是翻译,所有只供学习讨论,如有版权还属于原作者——作者:黄森堂*/
#30 在ATL中如何使用IPicture接口显示图片?
一下描述一种最简单的在 ALT 中使用 IPicture 来 显示图片的实例。控件的属性页可以选择图片, 选好后控件的背景就变成该图片 1.建立一个ALT的project,加入ALT对象选 controls选 full controls (也可以选别的)Next选Stock properties将Picture 加入 supported //这样, 会为控件生成一个picture属性,以及一个预制的 picture 属性对话框,方便选择图片。OK//m_pPicture 是一个 IPictureDisp. //由于M$的一个BUG 导致 build时 有三个warning 先不要管它, 后面会有解决办法 2.修改 HRESULT OnDraw(ATL_DRAWINFO& di)如下
HRESULT OnDraw(ATL_DRAWINFO& di) { RECT& rc = *(RECT*)di.prcBounds; Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom); /////////////////////////////////////draw our picture 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); } } ///////////////////////////////////////finished draw SetTextAlign(di.hdcDraw, TA_CENTER¦TA_BASELINE); LPCTSTR pszText = _T("ATL 3.0 : catest"); TextOut(di.hdcDraw, (rc.left + rc.right) / 2, (rc.top + rc.bottom) / 2, pszText, lstrlen(pszText));
return S_OK; } 
|