ATL问题集-#1 - #3

类别:VC语言 点击:0 评论:0 推荐:
 /*此文是将网上的一些文章,自已遇到的问题进行整理,有些是翻译,所有只供学习讨论,如有版权还归原作者——作者:黄森堂*/ #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;
}

本文地址:http://com.8s8s.com/it/it3641.htm