Click here to Skip to main content
6,295,667 members and growing! (15,003 online)
Email Password   helpLost your password?
Desktop Development » Document / View » General     Intermediate

An example editor with table and image support

By taphan

Use the new version rich edit control 4.1 to support table and image in your editor.
VC6Win2K, MFC, Dev
Posted:15 Jul 2005
Views:60,225
Bookmarked:29 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
12 votes for this article.
Popularity: 3.17 Rating: 2.93 out of 5
3 votes, 25.0%
1
1 vote, 8.3%
2

3
4 votes, 33.3%
4
4 votes, 33.3%
5

Sample screenshot

Introduction

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.

Using the code

  1. Create an editor where the base View is CrichEditView.
  2. In the 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;
    }
  3. In the 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");
  4. Now to insert table, add a new function like 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
    
    }
  5. To insert image, do again like above with the new function 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);
                }
            }
        }
    }
  6. Finally don�t forget to include the headers file.

    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.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

taphan


Member

Occupation: Web Developer
Location: Vietnam Vietnam

Other popular Document / View articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 36 (Total in Forum: 36) (Refresh)FirstPrevNext
GeneralNice and useful, a lot of help to me Pinmemberdokde112317:47 10 May '09  
Generalhow to make it readonly? Pinmemberrupanu4:58 28 May '08  
Generalwrite simple text Pinmembersheladiya chetan1:07 11 Jul '06  
Generali want to merge row of table Pinmembersheladiya chetan23:43 10 Jul '06  
Generali need to understand screept Pinmembersheladiya chetan1:58 3 Jul '06  
Generalhow to get a embed picture's data directly Pinmemberironsideliu5:52 1 Jun '06  
Generalhow to get data with bullets from editor Pinmembercancerion21:17 25 Apr '06  
GeneralTable and center text Pinmemberwaldermort8:30 18 Mar '06  
QuestionAnother bug - number of pages when print Pinmembermilanm7621:25 19 Feb '06  
AnswerRe: Another bug - number of pages when print Pinmemberxvnguyen21:34 19 Feb '06  
GeneralRe: Another bug - number of pages when print Pinmembermilanm7622:25 19 Feb '06  
GeneralWell done, but one question Pinmemberbenni1:22 1 Dec '05  
QuestionHow to get one cell's content Directly? PinmemberHongjun Ge20:43 28 Sep '05  
AnswerRe: How to get one cell's content Directly? Pinmembertaphan21:10 28 Sep '05  
GeneralRe: How to get one cell's content Directly? PinsussHongjun Ge17:55 29 Sep '05  
GeneralRe: How to get one cell's content Directly? Pinmembertaphan18:22 29 Sep '05  
GeneralHow to directly output the table Pinmemberqqz6:42 8 Aug '05  
GeneralRe: How to directly output the table Pinmembertaphan22:49 8 Aug '05  
GeneralRe: How to directly output the table Pinmemberqqz3:21 9 Aug '05  
GeneralRe: How to directly output the table Pinmembertaphan1:45 10 Aug '05  
GeneralRe: How to directly output the table Pinmemberqqz5:19 10 Aug '05  
GeneralRe: How to directly output the table Pinmembertaphan17:19 10 Aug '05  
GeneralHave some bugs PinmemberSchniddel1:27 17 Jul '05  
GeneralRe: Have some bugs Pinmembertaphan18:52 17 Jul '05  
GeneralRe: Have some bugs Pinmemberliberdong8:40 6 Aug '06  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin 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