1. 程式人生 > >淺談C/C++ 開發Excel外掛之任務窗格

淺談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