荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: ATL问题集-#1 - #3
发信站: 荔园晨风BBS站 (Fri Jun  1 07:57:48 2001), 转信


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

--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店