浅谈C/C++ 开发Excel插件之任务窗格

来源:互联网 发布:free源码解析 编辑:程序博客网 时间:2024/04/30 14:34

 Excel的任务窗格非常友好,开发Excel也避免不了,Choice在其插件实现了弹出对话框和任务窗格供用户选择。

如何在C++中创建任务窗格呢。

1.在CConnect类中添加ICustomTaskPaneConsumer接口,方法同前

修改为public IDispatchImpl<ICustomTaskPaneConsumer, &__uuidof(ICustomTaskPaneConsumer), &__uuidof(__Office), /* wMajor = */ 2, /* wMinor = */ 5>

  Vs会自动添加要实现的接口STDMETHOD(CTPFactoryAvailable)(ICTPFactory * CTPFactoryInst);

2.添加一个ATL控件(项目》添加》类》ATL》ATL控件)

ATL有三种控件类型 简单型 复合型 DHTML类型

简单型:创建一个空白窗体并实现OnDraw函数,开发者可以任意绘制界面

复合型:创建一个类似对话框的界面,开发者可将需要的控件拖拽上去,类似MFC。

DHTML:支持html控件,将开发者编写的html显示出来,支持JS。


选择复合型。

注:在编写类名的界面记得填写 proid, 创建任务窗格需要填写。


3.实现STDMETHOD(CTPFactoryAvailable)(ICTPFactory * CTPFactoryInst);

STDMETHOD(CTPFactoryAvailable)(ICTPFactory * CTPFactoryInst)
{
VARIANTARG v;
v.vt = VT_ERROR;
v.scode = DISP_E_PARAMNOTFOUND;
CTPFactoryInst->CreateCTP(CComBSTR(_T("EdbParamaTaskBarUi")), CComBSTR(_T("历史行情")), v, &m_pHistoryPane);
m_pHistoryPane->put_DockPosition(Office::MsoCTPDockPosition::msoCTPDockPositionLeft);
m_pHistoryPane->put_Width(320);
m_pIRibbonUIPtr->Invalidate();
VARIANT_BOOL isVisible;
m_pHistoryPane->get_Visible(&isVisible);
if (!isVisible)
{
m_pHistoryPane->put_Visible(TRUE);
}

}

EdbParamaTaskBarUi为proid;

    任务窗格就创建好了,以后的任务就是实现功能了。



参考文档:

"http://180.76.151.96/news/index.php/news/news_list_block?


callback=jQuery21109300857859198004_1468832797985&code=GP&start=0&need


Count=40&_=1468832797999" @0x8bc13c8


https://msdn.microsoft.com/zh-cn/aa338202


https://msdn.microsoft.com/zh-cn/aa338202




https://msdn.microsoft.com/zh-cn/aa722523.aspx#a16c7df5-93f3-4920-


baa8-7b7290794c15_AdditionalResources

0 0