![]() |
Desktop Development »
Document / View »
General
Intermediate
An example editor with table and image supportBy taphanUse the new version rich edit control 4.1 to support table and image in your editor. |
VC6Win2K, MFC, Dev
|
|
Advanced Search |
|
|
|
||||||||||||||||

TapEditor is just an editor application to show how to using the new documented msfedit.dll to support our editor to add a table.
There are some new features that the rich edit control has supported in this new version. Table is one of them. Now we use the code below to help your editor support table. For more information about richedit control 4.1, you can follow this link.
CrichEditView.
InitInstance() function of your editor, add the following code to load 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 function of the View, specify like this to tell the View to create the class RICHEDIT50W of the new richedit control version: BOOL CTapEditorView::PreCreateWindow(CREATESTRUCT& cs)
{
BOOL bRes = CRichEditView::PreCreateWindow(cs);
cs.style |= ES_SELECTIONBAR;
cs.lpszClass = szClassRE; // Create RICHEDIT50W class
return bRes;
}
Please add this code in the top of the CPP View file.
static const TCHAR szClassRE[] = TEXT("RICHEDIT50W");
OnInsertTable for example, and specify code like this: 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, with the code below: 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); } } } }
Include tapex.h file for inserting table.
#include "tapex.h"
And include TapBitmap.h, EnBitmap.h and ImageDataObject.h for inserting image.
#include "TapBitmap.h" #include "EnBitmap.h" #include "ImageDataObject.h"
This example applies for VC++ 6 so you don�t need to add the richedit.h header file if you don�t want to have errors.
If you use Visual Studio .NET or VC++ 7, you don�t need to use tapex.h and tapex.cpp files. For more information, please use this link.
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 15 Jul 2005 Editor: Smitha Vijayan |
Copyright 2005 by taphan Everything else Copyright © CodeProject, 1999-2009 Web11 | Advertise on the Code Project |