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