SDI 中的 OLE 客户端。如何添加工具栏?

Posted

技术标签:

【中文标题】SDI 中的 OLE 客户端。如何添加工具栏?【英文标题】:OLE Client in SDI. How do I add a toolbar? 【发布时间】:2008-10-17 16:49:53 【问题描述】:

我有一个 SDI,我正在使用 OLE 将 Excel 加载到其中。我想为此添加一个工具栏,我可以使用它来拥有一个非常突出且明显的“导入”按钮(以及其他一些按钮)。当 Excel 激活时,我通过 MFC 添加的工具栏全部隐藏或从界面中删除。当 Excel Ole 项变为活动状态时,有没有办法让工具栏保持在界面上并保持在界面上?

我尝试在 Excel OLE 项初始化后调用FloatControlBar,但没有任何效果。我想将菜单(确实保留并正常运行)扭曲成工具栏,但它需要停靠在左侧(要求)并具有用于命令的大而可见的图形描述......我还没有找到了一种方法来做到这一点。 CMenu 类允许图形菜单项,但我还没有发现一种方法可以对菜单命令本身做很多事情(除了在消息表中获取它的 commandid)。

【问题讨论】:

【参考方案1】:

虽然我对 MFC 不是很了解,但我在通过 COM/OLE 与 Microsoft Office 应用程序交互方面有一些经验。我想如果我理解正确,您正在将一个 excel 文档加载到您的应用程序中并在 OLE 窗口中显示?然后 Excel 菜单和按钮会显示在您的应用程序中?

如果是这种情况,那么到目前为止,将按钮添加到工具栏的最直接方法是通过启动时加载的模板将其添加到 excel 中。这可以包含您的按钮,然后运行一小段调用您的代码的 VBA 代码。甚至可以调用您通过 MFC 创建的菜单项。

通过 OLE 实现自动化的一个问题是,尽管它非常强大,但一旦 excel 意识到它是在 ole 窗口而不是本机窗口中运行,似乎就会出现某些限制。这可能会阻止您创建按钮并将它们显示在您的 ole 窗口中。

希望这有一些用处。

【讨论】:

感谢您的建议。我希望将按钮放在 Excel 窗口部分的外部,因为这是我的界面要求的一部分(交给我)。我可以加载我自己的菜单,并将它(没有弹出窗口)用作工具栏,但它不够突出......很容易看不到。

以上是关于SDI 中的 OLE 客户端。如何添加工具栏?的主要内容,如果未能解决你的问题,请参考以下文章

SDI框架中如何根据主机改变视图大小?

MFC, SDI app, 为啥视图的布局不能通过代码改变?

Win10下装 VC6.0单步调试报((OLE32.DLL): 0xC0000005: Access Violation)

MFC项目组合:如何将没有文档类的SDI应用程序添加到MDI应用程序中?应该使用子窗口吗?[MFC]

MFC SDI中 如何为动态创建的按钮添加消息处理函数

如何在高速公路客户端工具中添加基本身份验证标头