ATL问题集-#1 - #3 (转)

ATL问题集-#1 - #3 (转)[@more@] /*此文是将网上的一些文章,自已遇到的问题进行整理,有些是翻译,所有只供学习讨论,如有版权还归原作者——作者:黄森堂*/

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


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-986980/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752019/viewspace-986980/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值