加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

ActiveX控件的MFC设计之旅-第14步 .

发布时间:2020-12-17 00:23:46 所属栏目:大数据 来源:网络整理
导读:刚翻CodeGuru,发现一在运行时显示控件属性页的内容 http://www.codeguru.com/cpp/com-tech/activex/controls/article.php/c2649/ 试着照它的样子做了下来。 还有上一步的例子tppb 1.添加HRESULT GetPages(CAUUID *pPages) HRESULT CTppbCtrl::GetPages(CAUUI
刚翻CodeGuru,发现一在运行时显示控件属性页的内容
http://www.codeguru.com/cpp/com-tech/activex/controls/article.php/c2649/

试着照它的样子做了下来。

还有上一步的例子tppb

1.添加HRESULT GetPages(CAUUID *pPages)

HRESULT CTppbCtrl::GetPages(CAUUID *pPages)
{
GUID *pGUID;
const unsigned CPROPPAGES = 4;

pPages->cElems = 0;
pPages->pElems = NULL;

pGUID = (GUID*) CoTaskMemAlloc( CPROPPAGES * sizeof(GUID) );

if( NULL == pGUID )
{
return ResultFromScode(E_OUTOFMEMORY);
}

// Fill the array of property pages now
pGUID[0] = CTestPropPage::guid;
pGUID[1] = CLSID_CFontPropPage;
pGUID[2] = CLSID_CColorPropPage;
pGUID[3] = CLSID_CPicturePropPage;

//Fill the structure and return
pPages->cElems = CPROPPAGES;
pPages->pElems = pGUID;
return NOERROR;
}
这是一个普通的成员函数,主要功能是获得显示多少个属性页,有哪些属性页等内容。

2.添加控件的方法 void ShowProperties()

void CTppbCtrl::ShowProperties()
{
// TODO: Add your dispatch handler code here
CAUUID caGUID;
HRESULT hr;
LPDISPATCH pIDispatch = GetIDispatch(TRUE);
LCID lcid = AmbientLocaleID();

GetPages(&caGUID);

hr = OleCreatePropertyFrame(
m_hWnd,
10,
OLESTR("Do something control"),
1,
(IUnknown**) &pIDispatch,
caGUID.cElems,
caGUID.pElems,
lcid,
0L,
NULL );
if( FAILED(hr) )
{
AfxMessageBox("无法显示属性页",MB_OK | MB_ICONERROR,0);
}

CoTaskMemFree( (void*) caGUID.pElems );
return;
}

显示属性页的函数就是OleCreatePropertyFrame,显示哪些属性页,是通过GetPages函数获得的,属性页的信息放在CAUUID caGUID结构中。
OleCreatePropetyFrame函数的原型为
STDAPI OleCreatePropertyFrame(
HWND
hwndOwner,//属性页对话框的父窗口
UINT
x,//相对于父窗口的属性页横向位置
UINT y,//相对于父窗口的属性页纵向位置
LPCOLESTR lpszCaption,//属性页标题
ULONG
cObjects,//属性页中可以设置的控件的数目
LPUNKNOWN FAR*
lplpUnk,//属性页所有可设置的控件数组
ULONG
cPages,//显示的属性页的数目
LPCLSID
lpPageClsID,//属性页的CLSID数组
LCID lcid,//语言标志,不关心的话,可设置为0
DWORD
dwReserved,//Reserved
LPVOID
lpvReserved //Reserved );
在msdn上有介绍,可参考。 3.编译,新建一VB工程,添加tppb控件,添加代码如下: Private Sub Form_Load() Tppb1.ShowProperties End Sub 运行即可发现会弹出来属性页窗口。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读