/*此文是我将网上的一些文章,自已遇到的问题进行整理,有些是翻译,所有只供学习讨论,如有版权还属于原作者——作者:黄森堂*/
#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;
}