支持表格和图像的示例编辑器






3.28/5 (15投票s)
2005年7月15日
1分钟阅读

157428

4926
使用新的富文本编辑控件 4.1 来支持编辑器中的表格和图像。
引言
TapEditor 只是一个编辑器应用程序,用于演示如何使用新文档的 msfedit.dll 来支持我们的编辑器添加表格。
在这个新版本中,富文本编辑控件支持一些新功能。表格就是其中之一。现在我们使用下面的代码来帮助你的编辑器支持表格。有关 richedit 控件 4.1 的更多信息,您可以访问 此链接。
使用代码
- 创建一个基本视图为
CrichEditView
的编辑器。 - 在编辑器的
InitInstance()
函数中,添加以下代码来加载 msfedit.dll// Initialize RichEdit control if (LoadLibrary(_T("MSFTEDIT.DLL")) == NULL) { AfxMessageBox(_T("Could not load the RichControl Dll."), MB_OK|MB_ICONEXCLAMATION); return FALSE; }
- 在视图的
PreCreateWindow
函数中,像这样指定,以告诉视图创建新富文本编辑控件版本的类RICHEDIT50W
BOOL CTapEditorView::PreCreateWindow(CREATESTRUCT& cs) { BOOL bRes = CRichEditView::PreCreateWindow(cs); cs.style |= ES_SELECTIONBAR; cs.lpszClass = szClassRE; // Create RICHEDIT50W class return bRes; }
请将此代码添加到 CPP 视图文件的顶部。
static const TCHAR szClassRE[] = TEXT("RICHEDIT50W");
- 现在要插入表格,添加一个新函数,例如
OnInsertTable
,并指定如下代码void CTapEditorView::OnInsertTable() { CInsertTableDlg dlg; if(dlg.DoModal() == IDCANCEL) return; int rows = dlg.m_nRows, cols = dlg.m_nColumns; CString s = "{\\rtf1"; CString s = "{\\rtf1"; CString sTable = s + "file://ansi//ansicpg1252//deff0//deflang1033{//fonttbl" "{\\f0\\froman\\fprq2\\fcharset0 Times New Roman;}" "{\\f1\\fswiss\\fcharset0 Arial;}}" "{\\*\\generator Msftedit 5.41.15.1503;}\\viewkind4\\uc1"; CString row,col; row = "file://trowd//trgaph108//trleft8//" "trbrdrl//brdrs//brdrw10 file://trbrdrt//" "brdrs\\brdrw10 file://trbrdrr//brdrs//" "brdrw10 file://trbrdrb//brdrs//brdrw10 \\" "trpaddl108\\trpaddr108\\trpaddfl3\\trpaddfr3"; col = "file://clbrdrl//brdrw10//brdrs//clbrdrt//brdrw10//brdrs//clbrdrr//" "brdrw10\\brdrs\\clbrdrb\\brdrw10\\brdrs\\cellx"; CString endcell = "file://cell/"; CString endrow = "file://row/"; int i,j; int width = 8748/cols; CString sColw; // Loop for numbers of rows for(i=0;i<rows;i++) { sTable += row; // Loop for number of columns for(j=0;j<cols;j++) { sTable += col; sColw.Format(_T("%d"),width *(j+1)); sTable += sColw; } sTable += "file://pard//intbl"; for(j=0;j<cols;j++) { sTable += endcell; } sTable += endrow; } sTable += "file://par}";/ #ifdef _UNICODE LONG len = sTable.GetLength() * 2; char* data = new char[len + 1]; ClearString(sTable, data); SETTEXTEX st; st.codepage = 1200; st.flags = ST_SELECTION | ST_KEEPUNDO; SendMessage(EM_SETTEXTEX, (WPARAM)&st, (LPARAM)(LPCTSTR)data); delete data; #else SetTextEX(m_hWnd, sTable, ST_SELECTION|ST_KEEPUNDO, 1200); #endif }
- 要插入图像,再次像上面一样使用新函数
OnInsertImage
,并使用下面的代码void CTapEditorView::OnInsertImage() { CString sFilter = "All image file|*.bmp;*.jpg;*.gif|" "Bitmap Files (*.bmp)|*.bmp|JPEG Files (*.jpg)|*.jpg|" "GIF Files (*.gif)|*.gif|"; CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST|OFN_READONLY, sFilter); if(dlg.DoModal() == IDOK) { CTapBitmap bmp; if(bmp.Load(dlg.GetPathName())==FALSE) { AfxMessageBox(_T("Could not load image.")); return; } CEnBitmap enBitmap; CBitmap Bitmap; if (enBitmap.Attach(bmp.GetBMP(), 0)) { Bitmap.DeleteObject(); Bitmap.Attach(enBitmap.Detach()); IRichEditOle *pRichEditOle; pRichEditOle = GetRichEditCtrl().GetIRichEditOle(); HBITMAP hBitmap = (HBITMAP)Bitmap; if(hBitmap) { CImageDataObject::InsertBitmap(pRichEditOle, hBitmap); } } } }
- 最后,不要忘记包含头文件。
包含 tapex.h 文件以插入表格。
#include "tapex.h"
并包含 TapBitmap.h、EnBitmap.h 和 ImageDataObject.h 以插入图像。
#include "TapBitmap.h" #include "EnBitmap.h" #include "ImageDataObject.h"
此示例适用于 VC++ 6,因此如果您不想出现错误,则不需要添加 richedit.h 头文件。
如果您使用 Visual Studio .NET 或 VC++ 7,则不需要使用 tapex.h 和 tapex.cpp 文件。有关更多信息,请使用 此链接。