Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何自定义“数据链接属性”对话框中的“连接”选项卡?_C++_User Interface_Com_Oledb_Atl - Fatal编程技术网

C++ 如何自定义“数据链接属性”对话框中的“连接”选项卡?

C++ 如何自定义“数据链接属性”对话框中的“连接”选项卡?,c++,user-interface,com,oledb,atl,C++,User Interface,Com,Oledb,Atl,我正在开发一个OLEDB提供程序,目前它利用IDBPromptialize::PromptDataSource提供的默认连接对话框,如下所示。当我将提供程序与某些客户端工具(如MS Excel或.udl文件)一起使用时,会出现相同的UI。我现在计划创建自己的UI 在“提供程序”选项卡中选择不同的OLEDB提供程序时,我注意到其中一些提供程序的“连接”选项卡看起来非常不同,例如 因此,定制它在技术上似乎是可行的。我的问题是:怎么做 注意:我知道我可以组合自己的UI,并且可以随时弹出它。但这不会神奇

我正在开发一个OLEDB提供程序,目前它利用IDBPromptialize::PromptDataSource提供的默认连接对话框,如下所示。当我将提供程序与某些客户端工具(如MS Excel或.udl文件)一起使用时,会出现相同的UI。我现在计划创建自己的UI

在“提供程序”选项卡中选择不同的OLEDB提供程序时,我注意到其中一些提供程序的“连接”选项卡看起来非常不同,例如

因此,定制它在技术上似乎是可行的。我的问题是:怎么做

注意:我知道我可以组合自己的UI,并且可以随时弹出它。但这不会神奇地集成到“数据链接属性”对话框的“连接”选项卡中,对吗

谢谢

编辑 显然,我很快就接受了答案。我按照描述执行了所有步骤。当我在自己创建属性表的测试应用程序中使用我的提供者时,一切都[完美地][3]。我的测试应用程序在我的提供程序上调用isSpecifyPropertyPages::GetPages,并将结果传递给OleCreatePropertyFrame,如回答中所述

但是,当我在“数据链接”对话框中使用它时,只要我选择我的提供者并单击“下一步”按钮或其中一个选项卡,这些选项卡就会消失。只保留“提供程序”选项卡。 调试它时,我可以看到GetPages被成功调用,但是只有我的ConnectionTab的构造函数被调用,没有任何错误,并且在这之后选项卡消失,没有崩溃!。没有调用IPropertyPage方法或任何其他方法。 你知道会有什么问题吗

编辑-解决 好的,我知道了。在我的AdvancedTab类中,COM映射中缺少COM_接口\u EntryPersistPropertyBag。我把太多精力放在了连接选项卡上,因为我想先让它工作

如果有人感兴趣: 将define _ATL _DEBUG _QI放在include之前,使我发现IPersistPropertyBag的QueryInterface调用失败。

这里描述了这一点:

实现IIDBInitialize/IDBProperties的OLEDB提供程序的对象也必须实现IServiceProvider

系统将使用MSDAGUID.H中的OLEDB_SVC_DSLPropertyPage作为服务guid和接口ID调用此IServiceProvider实现

isSpecifyPropertyPages::GetPages填充已计数的 GUID值数组,其中每个GUID指定每个GUID的CLSID 属性页,该页可以显示在该对象的属性页中 对象数据链接核心组件调用GetPages以获取 正好由两个表示可扩展属性的CLSID组成的数组 页面:第一个用于替换连接选项卡,第二个用于替换连接选项卡 替换“高级”选项卡。这些页面必须正确注册,以便 它们可以由数据链路核心组件在过程中共同创建

这些属性页是标准窗口。

此处介绍:

实现IIDBInitialize/IDBProperties的OLEDB提供程序的对象也必须实现IServiceProvider

系统将使用MSDAGUID.H中的OLEDB_SVC_DSLPropertyPage作为服务guid和接口ID调用此IServiceProvider实现

isSpecifyPropertyPages::GetPages填充已计数的 GUID值数组,其中每个GUID指定每个GUID的CLSID 属性页,该页可以显示在该对象的属性页中 对象数据链接核心组件调用GetPages以获取 正好由两个表示可扩展属性的CLSID组成的数组 页面:第一个用于替换连接选项卡,第二个用于替换连接选项卡 替换“高级”选项卡。这些页面必须正确注册,以便 它们可以由数据链路核心组件在过程中共同创建


这些属性页是标准窗口。

我在实现此功能时遇到问题。当我编写自己的属性表应用程序时,它可以正常工作,但在数据链接对话框中不起作用。请参阅更新的问题。@yira-听起来像是代码中的错误。无法帮助复制代码。你是对的!这是一个愚蠢的错误。。。缺少接口条目。非常感谢。我在实现这一点上遇到了问题。当我编写自己的属性表应用程序时,它可以正常工作,但在数据链接对话框中不起作用。请参阅更新的问题。@yira-听起来像是代码中的错误。无法帮助复制代码。你是对的!这是一个愚蠢的错误。。。缺少接口条目。非常感谢。