ATL问题集-#1 - #3

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

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

#1 如何使用控件不能改变大小?

答:有时我们需要创建不可改变大小的控件,像那种在运行时没有界面的控件(例:时间控件,SysInfo 等),想做到这种功能的话,请把以下代码加入到控件类的构造函数:

m_bAutoSize = TRUE;

SIZEL size = {24, 24};

AtlPixelToHiMetric(&size, &m_sizeExtent);

m_sizeNatural = m_sizeExtent;

#2.如何在运行时显示属性页?

答:在CComControlBase::DoVerbProperties() 中会自动调用ISpecifyPropertyPages::GetPages(),::OleCreatePropertyFrame() 且创建与显示OLE属性页,只要从你的控件中简单调用DoVerbProperties()显示,如何下代码:

HRESULT STDMETHODCALLTYPE PopMeUp(void)

{

return DoVerbProperties(NULL, ::GetActiveWindow() );

}

#3.如何在运行时新增加属性页?

答:覆盖ISpecifyPropertyPagesImpl::GetPages()来增加你的新属性页,或删除它们,改变它们等到。以下代码演示在已存在的属性表中加入新的属性页:

HRESULT STDMETHODCALLTYPE GetPages(CAUUID *pPages)

{

if(SUCCEEDED(ISpecifyPropertyPages_GetPages(pPages,NULL))

{

pPages->cElems += 1;

pPages->pElems =

(GUID *)::CoTaskMemAlloc(pPages->cElems * sizeof(CLSID));

pPages->pElems[pPages->cElems - 1] = CLSID_General;

}

else

return E_FAIL;

}

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