www.pudn.com > MCF-RichEditCtrl.rar > RichEditGSDlg.cpp


// RichEditGSDlg.cpp : Implementierungsdatei 
// 
 
#include "stdafx.h" 
#include "RichEditCtrlGS.h" 
#include "RichEditGS.h" 
#include "RichEditGSDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CAboutDlg-Dialogfeld für Anwendungsbefehl "Info" 
 
class CAboutDlg : public CDialog 
{ 
public: 
	CAboutDlg(); 
 
// Dialogfelddaten 
	//{{AFX_DATA(CAboutDlg) 
	enum { IDD = IDD_ABOUTBOX }; 
	//}}AFX_DATA 
 
	// Vom Klassenassistenten generierte Überladungen virtueller Funktionen 
	//{{AFX_VIRTUAL(CAboutDlg) 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung 
	//}}AFX_VIRTUAL 
 
// Implementierung 
protected: 
	//{{AFX_MSG(CAboutDlg) 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
	//{{AFX_DATA_INIT(CAboutDlg) 
	//}}AFX_DATA_INIT 
} 
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAboutDlg) 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
	//{{AFX_MSG_MAP(CAboutDlg) 
		// Keine Nachrichten-Handler 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CRichEditGSDlg Dialogfeld 
 
CRichEditGSDlg::CRichEditGSDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CRichEditGSDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CRichEditGSDlg) 
		// HINWEIS: Der Klassenassistent fügt hier Member-Initialisierung ein 
	//}}AFX_DATA_INIT 
	// Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
	m_size_DlgMinSize.cx    = 0; 
	m_size_DlgMinSize.cy    = 0; 
	m_size_DlgClientSize.cx = 0; 
	m_size_DlgClientSize.cy = 0; 
	m_size_EditMinSize.cx   = 0; 
	m_size_EditMinSize.cy   = 0; 
	m_rect_EditMinRect.SetRectEmpty(); 
} 
 
void CRichEditGSDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CRichEditGSDlg) 
	DDX_Control(pDX, IDC_RICHEDIT1, m_Ctrl_RichEdit); 
	DDX_Control(pDX, IDC_RICHEDIT_STATIC, m_Ctrl_RichEditStatic); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CRichEditGSDlg, CDialog) 
	//{{AFX_MSG_MAP(CRichEditGSDlg) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 
	ON_COMMAND(ID_FILE_SAVE, OnFileSave) 
	ON_COMMAND(ID_FILE_CLOSE, OnFileClose) 
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy) 
	ON_COMMAND(ID_EDIT_CUT, OnEditCut) 
	ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) 
	ON_COMMAND(ID_FORMAT_BOLD, OnFormatBold) 
	ON_COMMAND(ID_FORMAT_DURCHSTRICH, OnFormatStrikeout) 
	ON_COMMAND(ID_FORMAT_FARBE, OnFormatColour) 
	ON_COMMAND(ID_FORMAT_FONTS, OnFormatFonts) 
	ON_COMMAND(ID_FORMAT_KURSIV, OnFormatItalic) 
	ON_COMMAND(ID_FORMAT_UNTERSTRICH, OnFormatUnderline) 
	ON_COMMAND(ID_FORMAT_LINK, OnFormatLink) 
	ON_NOTIFY(EN_LINK, IDC_RICHEDIT_STATIC, OnLinkRicheditStatic) 
	ON_COMMAND(ID_FORMAT_ABSATZ_BLOCK, OnFormatParagraphJustify) 
	ON_COMMAND(ID_FORMAT_ABSATZ_LINKS, OnFormatParagraphLeft) 
	ON_COMMAND(ID_FORMAT_ABSATZ_MITTE, OnFormatParagraphCenter) 
	ON_COMMAND(ID_FORMAT_ABSATZ_NUMMER, OnFormatParagraphBullet) 
	ON_COMMAND(ID_FORMAT_ABSATZ_RECHTS, OnFormatParagraphRight) 
	ON_WM_SIZE() 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_ABSATZ_BLOCK, OnUpdateFormatParagraphJustify) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_ABSATZ_LINKS, OnUpdateFormatParagraphLeft) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_ABSATZ_MITTE, OnUpdateFormatParagraphCenter) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_ABSATZ_NUMMER, OnUpdateFormatParagraphBullet) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_ABSATZ_RECHTS, OnUpdateFormatParagraphRight) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_BOLD, OnUpdateFormatBold) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_DURCHSTRICH, OnUpdateFormatStrikeout) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_KURSIV, OnUpdateFormatItalic) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_LINK, OnUpdateFormatLink) 
	ON_UPDATE_COMMAND_UI(ID_FORMAT_UNTERSTRICH, OnUpdateFormatUnderline) 
	//}}AFX_MSG_MAP 
	ON_MESSAGE(WM_KICKIDLE, OnKickIdle) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CRichEditGSDlg Nachrichten-Handler 
 
BOOL CRichEditGSDlg::OnInitDialog() 
{    
	CDialog::OnInitDialog(); 
 
	// Hinzufügen des Menübefehls "Info..." zum Systemmenü. 
 
	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden. 
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 
	ASSERT(IDM_ABOUTBOX < 0xF000); 
 
	CMenu* pSysMenu = GetSystemMenu(FALSE); 
	if (pSysMenu != NULL) 
	{ 
		CString strAboutMenu; 
		strAboutMenu.LoadString(IDS_ABOUTBOX); 
		if (!strAboutMenu.IsEmpty()) 
		{	 
			pSysMenu->AppendMenu(MF_SEPARATOR); 
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 
		} 
	} 
 
	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt 
	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist 
	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden 
	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden 
	 
	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen 
// Placing the toolbar 
  m_wndFormatBar.Create(this); 
  m_wndFormatBar.LoadToolBar(IDR_TOOLBAR_FORMAT); 
  m_wndFormatBar.SetBarStyle(CBRS_ALIGN_TOP | CBRS_TOOLTIPS | CBRS_FLYBY); 
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); 
  m_wndFormatBar.ShowWindow(SW_SHOW); 
 
// Initializing the static RichEditControl 
  m_Ctrl_RichEdit.SetWordWrap();// Default is on 
  m_Ctrl_RichEditStatic.SetRTF(IDR_RTF_SOURCERER); 
  m_Ctrl_RichEditStatic.EnableWindow(true); 
  FINDTEXTEX findText; 
  findText.chrg.cpMin = 0; 
  findText.chrg.cpMax = -1; 
  m_Ctrl_RichEditStatic.SetSel(findText.chrgText);// Select all Text 
  m_Ctrl_RichEditStatic.SetProtected();           // and prevent overtyping 
  findText.lpstrText = LPTSTR("source code");     // make first link 
  findText.chrgText.cpMin = 0; 
  findText.chrgText.cpMax = 0; 
  m_Ctrl_RichEditStatic.SetSel(findText.chrg); 
 // m_Ctrl_RichEditStatic.SetBackgroundColor(false,GetSysColor(COLOR_BTNFACE)); 
  if( -1 < m_Ctrl_RichEditStatic.FindText(FR_DOWN ,&findText) ) 
    { m_Ctrl_RichEditStatic.SetSel(findText.chrgText); 
	  m_Ctrl_RichEditStatic.SetLink(); 
	} 
  m_Ctrl_RichEditStatic.SetEventMask(ENM_LINK);// Enable linking 
// Calculating minimum sizes for RichEdit control, dialog and dialog client area 
  CRect rectDlg; 
  WINDOWPLACEMENT wpl; 
  GetWindowPlacement(&wpl); 
  rectDlg = wpl.rcNormalPosition; 
  rectDlg.NormalizeRect(); 
  m_size_DlgMinSize    = rectDlg.Size(); 
  GetClientRect(rectDlg); 
  m_size_DlgClientSize = rectDlg.Size(); 
 
  m_Ctrl_RichEdit.GetWindowPlacement(&wpl); 
  m_rect_EditMinRect = wpl.rcNormalPosition; 
  m_size_EditMinSize = m_rect_EditMinRect.Size(); 
 
  return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten 
} 
 
void CRichEditGSDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
// Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie  
//  den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das  
//  Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt. 
 
void CRichEditGSDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // Gerätekontext für Zeichnen 
 
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 
 
		// Symbol in Client-Rechteck zentrieren 
		int cxIcon = GetSystemMetrics(SM_CXICON); 
		int cyIcon = GetSystemMetrics(SM_CYICON); 
		CRect rect; 
		GetClientRect(&rect); 
		int x = (rect.Width() - cxIcon + 1) / 2; 
		int y = (rect.Height() - cyIcon + 1) / 2; 
 
		// Symbol zeichnen 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
	} 
} 
 
// Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer 
//  das zum Symbol verkleinerte Fenster mit der Maus zieht. 
HCURSOR CRichEditGSDlg::OnQueryDragIcon() 
{ 
	return (HCURSOR) m_hIcon; 
} 
 
void CRichEditGSDlg::OnFileOpen()  
{ static CString strInitDir = _T(""); 
  static CString strInitExt = _T(".rtf"); 
  static CString strInitFil = _T("*.rtf"); 
  static CString strInitNamen = _T("RTF-Files (*.rtf)|All files (*.*)|*.*||"); 
  CString strDateiname; 
  if( strInitDir.IsEmpty() )	  
    { LPTSTR pstr = strInitDir.GetBuffer(1032); 
      GetCurrentDirectory(1024,pstr); 
      strInitDir.ReleaseBuffer(); 
    } 
  CFileDialog DateiDlg (true, strInitExt ,strInitFil,0,strInitNamen); 
  DateiDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST; 
  DateiDlg.m_ofn.Flags |= OFN_NOCHANGEDIR; 
 // DateiDlg.m_ofn.Flags |= OFN_NOREADONLYRETURN; 
  DateiDlg.m_ofn.Flags |= OFN_PATHMUSTEXIST; 
// DateiDlg.m_ofn.Flags |= OFN_HIDEREADONLY; 
// DateiDlg.m_ofn.Flags |= OFN_OVERWRITEPROMPT; 
  DateiDlg.m_ofn.lpstrInitialDir = strInitDir; 
  if(IDOK == DateiDlg.DoModal()) 
    { strDateiname = DateiDlg.GetPathName(); 
     int iPos = strDateiname.ReverseFind(TCHAR('\\')); 
     if( -1 != iPos ) 
 	   { strInitDir = strDateiname.Left(iPos); 
 	   } 
	 m_Ctrl_RichEdit.LoadRTF(strDateiname); 
   } 
   
} 
 
void CRichEditGSDlg::OnFileSave()  
{ static CString strInitDir = _T(""); 
  static CString strInitExt = _T("rtf"); 
  static CString strInitFil = _T("*.rtf"); 
  static CString strInitNamen = _T("RTF-Files (*.rtf)|All files (*.*)|*.*||"); 
  CString strDateiname; 
  if( strInitDir.IsEmpty() )	  
    { LPTSTR pstr = strInitDir.GetBuffer(1032); 
      GetCurrentDirectory(1024,pstr); 
      strInitDir.ReleaseBuffer(); 
    } 
  if( !UpdateData(true) ) 
    { return; 
	} 
  CFileDialog DateiDlg (false, strInitExt ,strInitFil,0,strInitNamen); 
//  DateiDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST; 
//  DateiDlg.m_ofn.Flags |= OFN_NOCHANGEDIR; 
 // DateiDlg.m_ofn.Flags |= OFN_NOREADONLYRETURN; 
  DateiDlg.m_ofn.Flags |= OFN_PATHMUSTEXIST; 
// DateiDlg.m_ofn.Flags |= OFN_HIDEREADONLY; 
// DateiDlg.m_ofn.Flags |= OFN_OVERWRITEPROMPT; 
  DateiDlg.m_ofn.lpstrInitialDir = strInitDir; 
  if(IDOK == DateiDlg.DoModal()) 
    { strDateiname = DateiDlg.GetPathName(); 
     int iPos = strDateiname.ReverseFind(TCHAR('\\')); 
     if( -1 != iPos ) 
 	   { strInitDir = strDateiname.Left(iPos); 
 	   } 
     CFileStatus fileStatus; 
     BOOL bReturnStatus = FALSE; 
     bReturnStatus = CFile::GetStatus(strDateiname,fileStatus); 
     if( bReturnStatus ) 
       { int iReturn = AfxMessageBox(_T("This file already exists!\n Do you want to overwrite it?"),MB_YESNOCANCEL); 
         if( IDCANCEL == iReturn ) return; 
         if( IDNO == iReturn ) 
           { return; 
           } 
       } 
	 m_Ctrl_RichEdit.WriteRTF(strDateiname); 
   }  
} 
 
void CRichEditGSDlg::OnFileClose()  
{ OnCancel(); 
} 
 
void CRichEditGSDlg::OnEditCopy()  
{ m_Ctrl_RichEdit.Copy(); 
} 
 
void CRichEditGSDlg::OnEditCut()  
{ m_Ctrl_RichEdit.Cut(); 
} 
 
void CRichEditGSDlg::OnEditPaste()  
{ if( m_Ctrl_RichEdit.CanPaste() ) 
    { m_Ctrl_RichEdit.Paste(); 
	} 
} 
 
 
void CRichEditGSDlg::OnFormatBold()  
{ m_Ctrl_RichEdit.SetBold(); 
} 
 
void CRichEditGSDlg::OnFormatStrikeout()  
{ m_Ctrl_RichEdit.SetStrikeout(); 
} 
 
void CRichEditGSDlg::OnFormatColour()  
{ CColorDialog FarbDlg; 
  if( FarbDlg.DoModal() == IDOK ) 
    { m_Ctrl_RichEdit.SetColour(FarbDlg.GetColor()); 
    } 
} 
 
void CRichEditGSDlg::OnFormatFonts()  
{ CFontDialog FontDlg; 
  LOGFONT     logFont; 
  int         iFormat; 
  CString     strFontName = m_Ctrl_RichEdit.GetFontName(); 
  char *      pStr = strFontName.GetBuffer(32); 
  strncpy(logFont.lfFaceName,pStr,31); 
  strFontName.ReleaseBuffer(); 
 
  logFont.lfHeight    = -m_Ctrl_RichEdit.GetFontSize(); 
  iFormat = m_Ctrl_RichEdit.IsItalic(); 
  if( -1 == iFormat ) 
    { FontDlg.m_cf.Flags       |= CF_NOSTYLESEL; 
	} 
  else 
    { logFont.lfItalic = iFormat; 
	} 
  logFont.lfWeight    = FW_REGULAR; 
  iFormat = m_Ctrl_RichEdit.IsBold(); 
  if( 1 == iFormat) 
    { logFont.lfWeight = FW_BOLD; 
	} 
  if( -1 == iFormat ) 
    { FontDlg.m_cf.Flags       |= CF_NOSTYLESEL; 
	} 
  logFont.lfUnderline = m_Ctrl_RichEdit.IsUnderlined(); 
  logFont.lfStrikeOut = m_Ctrl_RichEdit.IsStrikeout(); 
   
  FontDlg.m_cf.lStructSize = sizeof(CHOOSEFONT); 
  FontDlg.m_cf.hwndOwner   = GetSafeHwnd(); 
  FontDlg.m_cf.lpLogFont   = &logFont; 
  FontDlg.m_cf.Flags       |= CF_INITTOLOGFONTSTRUCT; 
//  FontDlg.m_cf.iPointSize  = m_Ctrl_RichEdit.GetSelectionFontSize()*10; 
  if( IDOK == FontDlg.DoModal() ) 
    { m_Ctrl_RichEdit.SetRedraw(false); 
      m_Ctrl_RichEdit.SetFontName(FontDlg.m_cf.lpLogFont->lfFaceName); 
	  m_Ctrl_RichEdit.SetFontSize(abs(FontDlg.m_cf.lpLogFont->lfHeight)); 
	  m_Ctrl_RichEdit.SetColour(FontDlg.m_cf.rgbColors); 
      CHARFORMAT cf; 
      cf.cbSize = sizeof(CHARFORMAT); 
      m_Ctrl_RichEdit.GetSelectionCharFormat(cf); 
      cf.dwMask = cf.dwEffects = 0; 
      if( (FontDlg.m_cf.nFontType & ITALIC_FONTTYPE) ) 
	    { cf.dwMask    |= CFM_ITALIC; 
          cf.dwEffects |= CFE_ITALIC; 
		} 
      if( (FontDlg.m_cf.nFontType & BOLD_FONTTYPE) ) 
	    { cf.dwMask    |= CFM_BOLD; 
          cf.dwEffects |= CFE_BOLD; 
		} 
      if( FontDlg.m_cf.lpLogFont->lfStrikeOut ) 
	    { cf.dwMask    |= CFM_STRIKEOUT; 
          cf.dwEffects |= CFE_STRIKEOUT; 
		} 
      if( FontDlg.m_cf.lpLogFont->lfUnderline ) 
	    { cf.dwMask    |= CFM_UNDERLINE; 
          cf.dwEffects |= CFE_UNDERLINE; 
		} 
      m_Ctrl_RichEdit.SetSelectionCharFormat(cf); 
      m_Ctrl_RichEdit.SetRedraw(true); 
      m_Ctrl_RichEdit.Invalidate(); 
	} 
	// TODO: Code für Befehlsbehandlungsroutine hier einfügen	 
} 
 
void CRichEditGSDlg::OnFormatItalic()  
{ m_Ctrl_RichEdit.SetItalic(); 
} 
 
void CRichEditGSDlg::OnFormatUnderline()  
{ m_Ctrl_RichEdit.SetUnderlined(); 
} 
 
void CRichEditGSDlg::OnFormatLink()  
{ m_Ctrl_RichEdit.SetLink(); 
} 
 
 
void CRichEditGSDlg::OnLinkRicheditStatic(NMHDR* pNMHDR, LRESULT* pResult)  
{ ENLINK *pLink = reinterpret_cast(pNMHDR); 
	// TODO: Das Steuerelement sendet diese Benachrichtigung nur, wenn die Funktion 
	// CDialog::OnInitDialog() überschrieben wird, um die EM_SETEVENTMASK-Nachricht 
	// an das Steuerelement mit dem ENM_LINK-Attribut ORed in die Maske lParam zu senden. 
  FINDTEXTEX findText; 
  *pResult = 0; 
  if( pLink->msg == WM_LBUTTONDOWN ) 
    { long lStart = pLink->chrg.cpMin; 
	  long lEnde  = pLink->chrg.cpMin; 
      m_Ctrl_RichEditStatic.SetSel(pLink->chrg); 
	  CString strLink = m_Ctrl_RichEditStatic.GetSelText(); 
	  if( 0 == strLink.CompareNoCase(_T("sourcerer")) ) 
	    { m_Ctrl_RichEditStatic.SetRTF(IDR_RTF_SOURCERER); 
          *pResult = 1; 
          findText.chrg.cpMin = 0; 
          findText.chrg.cpMax = -1; 
          m_Ctrl_RichEditStatic.SetSel(findText.chrg);// prevent overtyping 
          m_Ctrl_RichEditStatic.SetProtected(); 
          findText.lpstrText = LPTSTR("source code"); 
          findText.chrgText.cpMin = 0; 
          findText.chrgText.cpMax = 0; 
          if( -1 < m_Ctrl_RichEditStatic.FindText(FR_DOWN ,&findText) ) 
            { m_Ctrl_RichEditStatic.SetSel(findText.chrgText); 
	          m_Ctrl_RichEditStatic.SetLink(); 
	        } 
		}  
	  if( 0 == strLink.CompareNoCase(_T("source code")) ) 
	    { m_Ctrl_RichEditStatic.SetRTF(IDR_RTF_SOURCECODE); 
          *pResult = 1; 
          findText.chrg.cpMin = 0; 
          findText.chrg.cpMax = -1; 
          m_Ctrl_RichEditStatic.SetSel(findText.chrg);// prevent overtyping 
          m_Ctrl_RichEditStatic.SetProtected(); 
          findText.lpstrText = LPTSTR("sourcerer"); 
          findText.chrgText.cpMin = 0; 
          findText.chrgText.cpMax = 0; 
          if( -1 < m_Ctrl_RichEditStatic.FindText(FR_DOWN ,&findText) ) 
            { m_Ctrl_RichEditStatic.SetSel(findText.chrgText); 
	          m_Ctrl_RichEditStatic.SetLink(); 
	        } 
          findText.lpstrText = LPTSTR("sourceress"); 
          findText.chrgText.cpMin = 0; 
          findText.chrgText.cpMax = 0; 
          if( -1 < m_Ctrl_RichEditStatic.FindText(FR_DOWN ,&findText) ) 
            { m_Ctrl_RichEditStatic.SetSel(findText.chrgText); 
	          m_Ctrl_RichEditStatic.SetLink(); 
	        } 
		}  
	  if( 0 == strLink.CompareNoCase(_T("sourceress")) ) 
	    { m_Ctrl_RichEditStatic.SetRTF(IDR_RTF_SOURCERESS); 
          *pResult = 1; 
          findText.chrg.cpMin = 0; 
          findText.chrg.cpMax = -1; 
          m_Ctrl_RichEditStatic.SetSel(findText.chrg);// prevent overtyping 
          m_Ctrl_RichEditStatic.SetProtected(); 
          findText.lpstrText = LPTSTR("source code"); 
          findText.chrgText.cpMin = 0; 
          findText.chrgText.cpMax = 0; 
          if( -1 < m_Ctrl_RichEditStatic.FindText(FR_DOWN ,&findText) ) 
            { m_Ctrl_RichEditStatic.SetSel(findText.chrgText); 
	          m_Ctrl_RichEditStatic.SetLink(); 
	        } 
		}  
	  m_Ctrl_RichEdit.SetFocus(); 
	}	 
} 
 
void CRichEditGSDlg::OnFormatParagraphJustify()  
{ m_Ctrl_RichEdit.SetJustify(); 
} 
 
void CRichEditGSDlg::OnFormatParagraphLeft()  
{ m_Ctrl_RichEdit.SetLeft(); 
} 
 
void CRichEditGSDlg::OnFormatParagraphCenter()  
{ m_Ctrl_RichEdit.SetCenter(); 
} 
 
void CRichEditGSDlg::OnFormatParagraphBullet()  
{ m_Ctrl_RichEdit.SetBullet(); 
} 
 
void CRichEditGSDlg::OnFormatParagraphRight()  
{ m_Ctrl_RichEdit.SetRight(); 
} 
 
void CRichEditGSDlg::OnSize(UINT nType, int cx, int cy)  
{	CDialog::OnSize(nType, cx, cy); 
	if( !IsWindow(m_Ctrl_RichEdit.GetSafeHwnd()) ) 
	  return; 
 
	int iDeltaX = 0; 
	int iDeltaY = 0; 
	if( cx > m_size_DlgClientSize.cx ) 
       iDeltaX = cx - m_size_DlgClientSize.cx; 
	if( cy > m_size_DlgClientSize.cy ) 
       iDeltaY = cy - m_size_DlgClientSize.cy; 
 
	CRect rectPos; 
	rectPos = m_rect_EditMinRect; 
    rectPos.right  = m_rect_EditMinRect.left + m_size_EditMinSize.cx + iDeltaX; 
    rectPos.bottom = m_rect_EditMinRect.top  + m_size_EditMinSize.cy + iDeltaY; 
    m_Ctrl_RichEdit.MoveWindow(rectPos); 
    m_Ctrl_RichEdit.SetRedraw(true); 
    m_Ctrl_RichEdit.Invalidate();	 
} 
 
void CRichEditGSDlg::OnUpdateFormatParagraphJustify(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsJustified(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_BLOCK,true); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_BLOCK,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_BLOCK,false); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_BLOCK,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_BLOCK,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_BLOCK,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatParagraphLeft(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsLeft(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_LINKS,true); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_LINKS,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_LINKS,false); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_LINKS,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_LINKS,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_LINKS,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatParagraphCenter(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsCentered(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_MITTE,true); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_MITTE,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_MITTE,false); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_MITTE,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_MITTE,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_MITTE,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatParagraphBullet(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsBulleted(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_NUMMER,true); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_NUMMER,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_NUMMER,false); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_NUMMER,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_NUMMER,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_NUMMER,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatParagraphRight(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsRight(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_RECHTS,true); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_RECHTS,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_RECHTS,false); 
             pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_RECHTS,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_ABSATZ_RECHTS,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_ABSATZ_RECHTS,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatBold(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsBold(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_BOLD,true); 
             pToolCtrl.CheckButton(ID_FORMAT_BOLD,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_BOLD,false); 
             pToolCtrl.CheckButton(ID_FORMAT_BOLD,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_BOLD,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_BOLD,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatStrikeout(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsStrikeout(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_DURCHSTRICH,true); 
             pToolCtrl.CheckButton(ID_FORMAT_DURCHSTRICH,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_DURCHSTRICH,false); 
             pToolCtrl.CheckButton(ID_FORMAT_DURCHSTRICH,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_DURCHSTRICH,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_DURCHSTRICH,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatItalic(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsItalic(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_KURSIV,true); 
             pToolCtrl.CheckButton(ID_FORMAT_KURSIV,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_KURSIV,false); 
             pToolCtrl.CheckButton(ID_FORMAT_KURSIV,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_KURSIV,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_KURSIV,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatLink(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsLinked(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_LINK,true); 
             pToolCtrl.CheckButton(ID_FORMAT_LINK,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_LINK,false); 
             pToolCtrl.CheckButton(ID_FORMAT_LINK,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_LINK,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_LINK,false); 
             break; 
  } 
} 
 
void CRichEditGSDlg::OnUpdateFormatUnderline(CCmdUI* pCmdUI)  
{ CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  int iValue = m_Ctrl_RichEdit.IsUnderlined(); 
  switch( iValue) 
  { case -1: pToolCtrl.Indeterminate(ID_FORMAT_UNTERSTRICH,true); 
             pToolCtrl.CheckButton(ID_FORMAT_UNTERSTRICH,false); 
             break;  
    case  1: pToolCtrl.Indeterminate(ID_FORMAT_UNTERSTRICH,false); 
             pToolCtrl.CheckButton(ID_FORMAT_UNTERSTRICH,true); 
             break; 
    default: pToolCtrl.CheckButton(ID_FORMAT_UNTERSTRICH,false); 
             pToolCtrl.Indeterminate(ID_FORMAT_UNTERSTRICH,false); 
             break; 
  } 
} 
 
// Putting the Buttons to work 
LRESULT CRichEditGSDlg::OnKickIdle(WPARAM, LPARAM) 
{ TBBUTTON infoBtn; 
  int i,iCount; 
  CCmdUI cmdUI; 
  CToolBarCtrl &pToolCtrl = m_wndFormatBar.GetToolBarCtrl(); 
  iCount = pToolCtrl.GetButtonCount(); 
  for( i = 0; i < iCount; i++ ) 
     { pToolCtrl.GetButton(i,&infoBtn); 
       cmdUI.m_nID = infoBtn.idCommand; 
       cmdUI.DoUpdate(this, FALSE); 
	 } 
  return TRUE; 
}