ATL问题集-#30

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

#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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航