Chinaunix首页 | 论坛 | 博客
  • 博客访问: 194811
  • 博文数量: 90
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2017-08-23 16:48
文章分类

全部博文(90)

文章存档

2015年(1)

2011年(21)

2010年(59)

2009年(9)

我的朋友

分类: C/C++

2010-07-14 10:16:44

刚翻CodeGuru,发现一在运行时显示控件属性页的内容

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

还有上一步的例子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,
            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
运行即可发现会弹出来属性页窗口。

 

阅读(1783) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~