在VC中呼叫WORD(顯示,修改,存檔,執行宏)之三。呼叫word的各種對話方塊翻頁等。 (轉)

worldblog發表於2007-12-09
在VC中呼叫WORD(顯示,修改,存檔,執行宏)之三。呼叫word的各種對話方塊翻頁等。 (轉)[@more@]

有了這個,可以替換掉的選單了:)也就是說,你可以完全不把word顯示出來就可以完全實現WORD的功能了。

在View選單中,選ClassWizard,選Automation選項卡,選Add Class,選擇From a TypeLibrary, 在目錄中選中 Word 97/2000 型別庫Word8.olb或Word9.olb,選中Dialog,Dialogs,ion。單擊ok

word的對話方塊如下:

   TRY{
 LPDISPATCH lpDisp;  
 if (m_pSelection)
 {
 lpDisp = m_pSelection->GetIDispatch();  
 Documents docs; 
 _Application app;  
 _Document mydoc; 
 mydoc.AttachDispatch (lpDisp,TRUE);
 app=mydoc.GetApplication (); 
 mydoc.Activate (); 
 Dialogs mydialogs;
 Dialog  mydialog;
 mydialogs.AttachDispatch (app.GetDialogs (),TRUE); 
  mydialog.AttachDispatch (mydialogs.Item (112),TRUE);

/*112是查詢替換*/
 mydialog.Show  (COleVariant((short)0));
 mydialog.Execute ();
 mydialog.DetachDispatch ();

 
 }
 }
 CATCH(CException, e)
 {
  /*your pleaser to display error message*/
 TCHAR errormsg[255];
 e->GetErrorMessage (errormsg,255,NULL);
 }
 END_CATCH
return 0;

/*在WORD中錄製新宏,輸入Dialogs(這時會自動出現智慧填充隨便選擇一個然後在其下右鍵單擊定義。可以檢視其詳細資訊。像新建是79,開啟檔案是80,頁面設定是178 等等具體的嗎?看字面意思了。再不成,就一個一個地試吧。把上面的112替換成你想要的就成了。show(COleVariant((short)0)就是一直顯示,直到做出選擇可以設成你想要的毫秒數。*/

 

下面是翻頁的具體程式碼(帶COPY&PASTE):

int CQsofficeView::adjustpage(int oldstartpage, int totalpages,int nowstartpage,BOOL downorup)
{
   TRY{
 LPDISPATCH lpDisp;  
 if (m_pSelection)
 {
 lpDisp = m_pSelection->GetIDispatch();  
 Documents docs; 
 _Application app;  
 _Document mydoc; 
 mydoc.AttachDispatch (lpDisp,TRUE);
 app=mydoc.GetApplication (); 
 mydoc.Activate (); 
 Selection myselection;
  myselection.AttachDispatch (app.GetSelection (),TRUE); 
 myselection.GoTo (COleVariant((short)1),COleVariant((short)2),COleVariant((short)0),COleVariant((short)oldstartpage));
 myselection.MoveDown (COleVariant((short)7),COleVariant((short)totalpages),COleVariant((short)2));   
 myselection.Cut ();
 myselection.GoTo (COleVariant((short)1),COleVariant((short)2),COleVariant((short)0),COleVariant((short)nowstartpage)); 
 myselection.Paste ();
 
 }
 }
 CATCH(CException, e)
 {
 /*your pleaser to display error message*/
 TCHAR errormsg[255];
 e->GetErrorMessage (errormsg,255,NULL);
 }
 END_CATCH
return 0;

}

實在太高興了,所以又把原始碼給放上來了。

實現WORD功能技術上沒什麼難題了。以後不會有這種文件了。:)

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990137/,如需轉載,請註明出處,否則將追究法律責任。

相關文章