Step4Dlg.cpp
上传用户:tjyzx0508
上传日期:2013-02-16
资源大小:254k
文件大小:6k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. // Step4Dlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Step4.h"
  5. #include "Step4Dlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CStep4Dlg dialog
  13. CStep4Dlg::CStep4Dlg(CWnd* pParent /*=NULL*/)
  14. : CDialog(CStep4Dlg::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CStep4Dlg)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  20. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  21. }
  22. void CStep4Dlg::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CDialog::DoDataExchange(pDX);
  25. //{{AFX_DATA_MAP(CStep4Dlg)
  26. // NOTE: the ClassWizard will add DDX and DDV calls here
  27. //}}AFX_DATA_MAP
  28. }
  29. BEGIN_MESSAGE_MAP(CStep4Dlg, CDialog)
  30. //{{AFX_MSG_MAP(CStep4Dlg)
  31. ON_WM_PAINT()
  32. ON_WM_QUERYDRAGICON()
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CStep4Dlg message handlers
  37. BOOL CStep4Dlg::OnInitDialog()
  38. {
  39. CDialog::OnInitDialog();
  40. // Set the icon for this dialog.  The framework does this automatically
  41. //  when the application's main window is not a dialog
  42. SetIcon(m_hIcon, TRUE); // Set big icon
  43. SetIcon(m_hIcon, FALSE); // Set small icon
  44. // TODO: Add extra initialization here
  45. return TRUE;  // return TRUE  unless you set the focus to a control
  46. }
  47. // If you add a minimize button to your dialog, you will need the code below
  48. //  to draw the icon.  For MFC applications using the document/view model,
  49. //  this is automatically done for you by the framework.
  50. void CStep4Dlg::OnPaint() 
  51. {
  52. if (IsIconic())
  53. {
  54. CPaintDC dc(this); // device context for painting
  55. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  56. // Center icon in client rectangle
  57. int cxIcon = GetSystemMetrics(SM_CXICON);
  58. int cyIcon = GetSystemMetrics(SM_CYICON);
  59. CRect rect;
  60. GetClientRect(&rect);
  61. int x = (rect.Width() - cxIcon + 1) / 2;
  62. int y = (rect.Height() - cyIcon + 1) / 2;
  63. // Draw the icon
  64. dc.DrawIcon(x, y, m_hIcon);
  65. }
  66. else
  67. {
  68. CDialog::OnPaint();
  69. }
  70. }
  71. // The system calls this to obtain the cursor to display while the user drags
  72. //  the minimized window.
  73. HCURSOR CStep4Dlg::OnQueryDragIcon()
  74. {
  75. return (HCURSOR) m_hIcon;
  76. }
  77. #include "msword9.h"
  78. #include <AtlBase.h>
  79. void CStep4Dlg::OnOK() 
  80. {
  81. _Application app;
  82. app.CreateDispatch(_T("Word.Application"));
  83. app.SetVisible(TRUE);
  84. Documents docs=app.GetDocuments();
  85. CComVariant Template(_T(""));
  86. CComVariant NewTemplate(false),DocumentType(0),Visible;
  87. docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);
  88. Selection sel=app.GetSelection();
  89. sel.TypeText(_T("HELLOrn大家好呀"));
  90. AfxMessageBox(_T("好了,我要保存到c:\hello.doc中了"));
  91. /**************** 这是在WORD中录制的新建文档直到另存的宏 *************
  92.     Documents.Add Template:= _
  93.         "C:Documents and SettingsAdministratorApplication DataMicrosoftTemplatesNormal.dot" _
  94.         , NewTemplate:=False, DocumentType:=0
  95.     Selection.TypeText Text:="Hello"
  96.     Selection.TypeParagraph
  97.     Selection.TypeText Text:="大家好"
  98.     ChangeFileOpenDirectory "C:"
  99.     ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _
  100.         , LockComments:=False, Password:="", AddToRecentFiles:=True, _
  101.         WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
  102.          SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
  103.         False
  104. *********************************************************************/
  105. /**************** 程序思路 ******************************************
  106. 另存为的函数是ActiveDocument.SaveAs,显然表示的是对当前活跃的文档进行保存,
  107. 在我们的类中没有ActiveDocument,其实它对应的是_Document,而这个可以由
  108. _Application 的GetActiveDocument()得到。你一定会提问:“你怎么知道的?”
  109. 呵呵,怎么说那,我怎么知道的那?答案是:猜。其实如果使用的多了,分析、猜
  110. 查找都是办法。如果想得到确切的方法,其实可以在VBA的书或微软的网站中搜索
  111. *********************************************************************/
  112. _Document doc=app.GetActiveDocument(); //得到ActiveDocument
  113. CComVariant FileName(_T("c:\Hello.doc")); //文件名
  114. CComVariant FileFormat(0); //重点,看下面的说明
  115. CComVariant LockComments(false),Password(_T(""));
  116. CComVariant AddToRecentFiles(true),WritePassword(_T(""));
  117. CComVariant ReadOnlyRecommended(false),EmbedTrueTypeFonts(false);
  118. CComVariant SaveNativePictureFormat(false),SaveFormsData(false);
  119. CComVariant SaveAsAOCELetter(false);
  120. /*************** FileFormat 文件格式说明 ****************************
  121. 参数FileFormat,在WORD的宏中,使用的是 wdFormatDocument,这是什么那?
  122. 其实这是WORD宏中所使用的常量,由匈牙利命名可以知道wd其实是DWORD的意思
  123. 知道了是一个正数,那么它到底是多少那?其实有一个办法可以知道,那就是在
  124. WORD宏程序中,加一条语句:MsgBox wdFormatDocument 这样你再运行宏程序,
  125. 就能看到这个常量是多少了。呵呵,这个常量是0,我够聪明吧^_^
  126. *********************************************************************/
  127. doc.SaveAs(&FileName,&FileFormat,&LockComments,&Password,
  128. &AddToRecentFiles,&WritePassword,&ReadOnlyRecommended,
  129. &EmbedTrueTypeFonts,&SaveNativePictureFormat,&SaveFormsData,
  130. &SaveAsAOCELetter);
  131. sel.ReleaseDispatch();
  132. doc.ReleaseDispatch();
  133. docs.ReleaseDispatch();
  134. CComVariant SaveChanges(false),OriginalFormat,RouteDocument;
  135. app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
  136. app.ReleaseDispatch();
  137. AfxMessageBox(_T("请检查c:\hello.doc是否正常产生了。下面该学习Setp5了"));
  138. }