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

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. // Step5Dlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Step5.h"
  5. #include "Step5Dlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CStep5Dlg dialog
  13. CStep5Dlg::CStep5Dlg(CWnd* pParent /*=NULL*/)
  14. : CDialog(CStep5Dlg::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CStep5Dlg)
  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 CStep5Dlg::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CDialog::DoDataExchange(pDX);
  25. //{{AFX_DATA_MAP(CStep5Dlg)
  26. // NOTE: the ClassWizard will add DDX and DDV calls here
  27. //}}AFX_DATA_MAP
  28. }
  29. BEGIN_MESSAGE_MAP(CStep5Dlg, CDialog)
  30. //{{AFX_MSG_MAP(CStep5Dlg)
  31. ON_WM_PAINT()
  32. ON_WM_QUERYDRAGICON()
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CStep5Dlg message handlers
  37. BOOL CStep5Dlg::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. SetDlgItemText(IDC_EDIT1,_T("中华人民共和国"));
  46. return TRUE;  // return TRUE  unless you set the focus to a control
  47. }
  48. // If you add a minimize button to your dialog, you will need the code below
  49. //  to draw the icon.  For MFC applications using the document/view model,
  50. //  this is automatically done for you by the framework.
  51. void CStep5Dlg::OnPaint() 
  52. {
  53. if (IsIconic())
  54. {
  55. CPaintDC dc(this); // device context for painting
  56. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  57. // Center icon in client rectangle
  58. int cxIcon = GetSystemMetrics(SM_CXICON);
  59. int cyIcon = GetSystemMetrics(SM_CYICON);
  60. CRect rect;
  61. GetClientRect(&rect);
  62. int x = (rect.Width() - cxIcon + 1) / 2;
  63. int y = (rect.Height() - cyIcon + 1) / 2;
  64. // Draw the icon
  65. dc.DrawIcon(x, y, m_hIcon);
  66. }
  67. else
  68. {
  69. CDialog::OnPaint();
  70. }
  71. }
  72. // The system calls this to obtain the cursor to display while the user drags
  73. //  the minimized window.
  74. HCURSOR CStep5Dlg::OnQueryDragIcon()
  75. {
  76. return (HCURSOR) m_hIcon;
  77. }
  78. /***************** WORD 中录制的宏,按笔画排序(全部选择,菜单表格排序) ********
  79.     MsgBox wdSortFieldStroke    '5      使用了常量,所以使用MsgBox得到具体的数值
  80.     MsgBox wdSortOrderAscending '0
  81.     MsgBox wdSortFieldSyllable  '3
  82. MsgBox wdSeparateByTabs     '1
  83.     MsgBox wdSimplifiedChinese  '2052
  84.     
  85.     Selection.WholeStory '全选
  86.     Selection.Sort ExcludeHeader:=False, FieldNumber:="段落数", SortFieldType:= _
  87.         wdSortFieldStroke, SortOrder:=wdSortOrderAscending, FieldNumber2:="", _
  88.         SortFieldType2:=wdSortFieldSyllable, SortOrder2:=wdSortOrderAscending, _
  89.         FieldNumber3:="", SortFieldType3:=wdSortFieldSyllable, SortOrder3:= _
  90.         wdSortOrderAscending, Separator:=wdSortSeparateByTabs, SortColumn:=False, _
  91.          CaseSensitive:=False, LanguageID:=wdSimplifiedChinese
  92.     Selection.Copy '把排序后的结果,复制到剪贴板
  93. *********************************************************************************/
  94. #include "msword9.h"
  95. #include <AtlBase.h>
  96. void CStep5Dlg::OnOK() 
  97. {
  98. CString str;
  99. GetDlgItemText(IDC_EDIT1,str);
  100. str.TrimLeft(); str.TrimRight();
  101. if(str.IsEmpty()) return;
  102. ::CoInitialize(NULL);
  103. _Application app;
  104. app.CreateDispatch(_T("Word.Application"));
  105. //app.SetVisible(FALSE); //这次不调用显示,因为我们要偷偷摸摸的转换:)
  106. Documents docs=app.GetDocuments();
  107. CComVariant Template(""),NewTemplate(false),DocumentType(0),Visible;
  108. docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);
  109. Selection sel=app.GetSelection();
  110. for(int i=0;i<str.GetLength()/2;i++)
  111. { //这里只考虑了输入为纯汉字的情况,你自己修改为可以支持中英文混合的情况
  112. sel.TypeText(str.Mid(i*2,2)+"rn"); //2个字符表示一个汉字,用回车换行分隔
  113. }
  114. sel.WholeStory(); //全部选择
  115. CComVariant ExcludeHeader(false);
  116. CComVariant FieldNumber(_T("段落数")),SortFieldType(5),SortOrder(0);
  117. CComVariant FieldNumber2(_T("")),SortFieldType2(3),SortOrder2(0);
  118. CComVariant FieldNumber3(_T("")),SortFieldtype3(3),SortOrder3(0);
  119. CComVariant SortColumn(false),Separator(1),LanguageID(2052);
  120. CComVariant CaseSensitive(false),BidiSort,IgnoreThe;
  121. CComVariant IgnoreKashida,IgnoreDiacritics,IgnoreHe;
  122. //排序
  123. sel.Sort(&ExcludeHeader,&FieldNumber,&SortFieldType,&SortOrder,
  124. &FieldNumber2,&SortFieldType2,&SortOrder2,&FieldNumber3,
  125. &SortFieldtype3,&SortOrder3,&SortColumn,&Separator,
  126. &CaseSensitive,&BidiSort,&IgnoreThe,&IgnoreKashida,
  127. &IgnoreDiacritics,&IgnoreHe,&LanguageID);
  128. //其实,这里可以直接调用sel.GetText()取得文本。
  129. //但现在选择复制到剪贴板的方式。
  130. sel.Copy(); //复制到剪贴板
  131. if(OpenClipboard())
  132. { //从剪贴板取出排序后的文字
  133. HGLOBAL hMem=::GetClipboardData(CF_TEXT);
  134. LPCTSTR lp=(LPCTSTR)::GlobalLock(hMem);
  135. str=lp;
  136. ::GlobalUnlock(hMem);
  137. CloseClipboard();
  138. str.Replace("rn",""); //删除回车换行
  139. SetDlgItemText(IDC_EDIT2,str);
  140. }
  141. sel.ReleaseDispatch();
  142. docs.ReleaseDispatch();
  143. CComVariant SaveChanges(false),OriginalFormat,RouteDocument;
  144. app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
  145. app.ReleaseDispatch();
  146. ::CoUninitialize();
  147. }