ITPub博客

首页 > 应用开发 > IT综合 > ATL问题集-#1 - #3 (转)

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

原创 IT综合 作者:amyz 时间:2007-11-29 17:07:39 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7363137