淺談C/C++ 開發Excel外掛之任務窗格
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