ActiveX控件的MFC设计之旅-第14步 .
来源:互联网 发布:易特店服装软件 编辑:程序博客网 时间:2024/06/06 02:01
刚翻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,
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函数的原型为
在msdn上有介绍,可参考。
3.编译,新建一VB工程,添加tppb控件,添加代码如下:
Private Sub Form_Load()
Tppb1.ShowProperties
End Sub
运行即可发现会弹出来属性页窗口。
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,
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
运行即可发现会弹出来属性页窗口。
- ActiveX控件的MFC设计之旅-第14步
- ActiveX控件的MFC设计之旅-第14步 .
- ActiveX控件的MFC设计之旅-第14步 .
- ActiveX控件的MFC设计之旅-第3步
- ActiveX控件的MFC设计之旅-第4步
- ActiveX控件的MFC设计之旅-第5步
- ActiveX控件的MFC设计之旅-第6步
- ActiveX控件的MFC设计之旅-第7步
- ActiveX控件的MFC设计之旅-第8步
- ActiveX控件的MFC设计之旅-第9步
- ActiveX控件的MFC设计之旅-第10步
- ActiveX控件的MFC设计之旅-第11步
- ActiveX控件的MFC设计之旅-第12步
- ActiveX控件的MFC设计之旅-第13步
- ActiveX控件的MFC设计之旅-第15步
- ActiveX控件的MFC设计之旅-第16步
- ActiveX控件的MFC设计之旅-第17步
- ActiveX控件的MFC设计之旅-第18步
- ActiveX控件的MFC设计之旅-第12步 .
- 浅谈极限编程(XP)和代码重构(Refectoring)
- oracle10g 数据库删除
- Multi-touch in air2
- ActiveX控件的MFC设计之旅-第13步 .
- ActiveX控件的MFC设计之旅-第14步 .
- work hard
- Unix哲学
- IT草根的江湖之路之六:曙光,第一次破例
- 用自己的文件在运行时持久化控件属性 .
- struts2 教程,没事儿可以看看
- Meta的使用方法技巧
- ActiveX控件的MFC设计之旅-第14步 .
- appserv与tomcat整合JSP PHP