⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 richeditdlg.cpp

📁 这些源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// RichEditDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Controls.h"
#include "RichEditDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

struct FONTDATA
	{
	CString 		strFont;
	CComboBoxEx		*FontBox;
	CRichEditDlg	*Papa;
	};

#define		EDIT_STYLES		ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN
#define		EDIT_EX_STYLES	WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE

/////////////////////////////////////////////////////////////////////////////
// CRichEditDlg property page

IMPLEMENT_DYNCREATE(CRichEditDlg, CPropertyPage)

CRichEditDlg::CRichEditDlg() : CPropertyPage(CRichEditDlg::IDD)
{

	//{{AFX_DATA_INIT(CRichEditDlg)
	m_nFormatItalic = FALSE;
	m_nFormatBold = FALSE;
	m_nFormatStrikout = FALSE;
	m_nFormatUnderline = FALSE;
	m_nParaAlign = 0;
	m_nParaIndentBullets = FALSE;
	//}}AFX_DATA_INIT
	m_clrBack = GetSysColor (COLOR_WINDOW);
	for (int i = 0; i < 16; ++i)
		m_clrCustom[i] = RGB (0xff, 0xff, 0xff);
	m_psp.dwFlags &= ~PSP_HASHELP;
}

CRichEditDlg::~CRichEditDlg()
{
}

void CRichEditDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRichEditDlg)
	DDX_Control(pDX, IDC_INDENTBULLETS, m_ctlParaIndentBullets);
	DDX_Control(pDX, IDC_POINTBOX, m_ctlPointBox);
	DDX_Control(pDX, IDC_FONTBOX, m_ctlFontBox);
	DDX_Control(pDX, IDC_PARAGRAPHRIGHT, m_ctlParaRight);
	DDX_Control(pDX, IDC_PARAGRAPHCENTER, m_ctlParaCenter);
	DDX_Control(pDX, IDC_PARAGRAPHLEFT, m_ctlParaLeft);
	DDX_Control(pDX, IDC_INDENTMORE, m_ctlParaIndentMore);
	DDX_Control(pDX, IDC_INDENTLESS, m_ctlParaIndentLess);
	DDX_Control(pDX, IDC_FORMATUNDERLINE, m_ctlFormatUnderline);
	DDX_Control(pDX, IDC_FORMATSTRIKEOUT, m_ctlFormatStrikeout);
	DDX_Control(pDX, IDC_FORMATITALIC, m_ctlFormatItalic);
	DDX_Control(pDX, IDC_FORMATBOLD, m_ctlFormatBold);
	DDX_Control(pDX, IDC_RICH_SAMPLE, m_RichSample);
	DDX_Check(pDX, IDC_FORMATITALIC, m_nFormatItalic);
	DDX_Check(pDX, IDC_FORMATBOLD, m_nFormatBold);
	DDX_Check(pDX, IDC_FORMATSTRIKEOUT, m_nFormatStrikout);
	DDX_Check(pDX, IDC_FORMATUNDERLINE, m_nFormatUnderline);
	DDX_Radio(pDX, IDC_PARAGRAPHLEFT, m_nParaAlign);
	DDX_Check(pDX, IDC_INDENTBULLETS, m_nParaIndentBullets);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRichEditDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CRichEditDlg)
	ON_BN_CLICKED(IDC_RICHSETCOLOR, OnRichsetcolor)
	ON_WM_PAINT()
	ON_CBN_SELCHANGE(IDC_FONTBOX, OnSelchangeFontbox)
	ON_CBN_SELCHANGE(IDC_POINTBOX, OnSelchangePointbox)
	ON_BN_CLICKED(IDC_RICHSETTEXTCOLOR, OnRichsettextcolor)
	ON_BN_CLICKED(IDC_FORMATBOLD, OnFormatBold)
	ON_BN_CLICKED(IDC_FORMATITALIC, OnFormatItalic)
	ON_BN_CLICKED(IDC_FORMATSTRIKEOUT, OnFormatStrikeout)
	ON_BN_CLICKED(IDC_FORMATUNDERLINE, OnFormatUnderline)
	ON_BN_CLICKED(IDC_PARAGRAPHLEFT, OnParagraphleft)
	ON_BN_CLICKED(IDC_PARAGRAPHCENTER, OnParagraphcenter)
	ON_BN_CLICKED(IDC_PARAGRAPHRIGHT, OnParagraphright)
	ON_BN_CLICKED(IDC_INDENTLESS, OnIndentless)
	ON_BN_CLICKED(IDC_INDENTMORE, OnIndentmore)
	ON_BN_CLICKED(IDC_INDENTBULLETS, OnIndentbullets)
	ON_NOTIFY(EN_MSGFILTER, IDC_RICH_SAMPLE, OnMsgfilterRichSample)
	ON_NOTIFY(CBEN_GETDISPINFO, IDC_FONTBOX, OnGetdispinfoFontbox)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRichEditDlg message handlers

// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CPropertyPage::OnInitDialog()
// function to send the EM_SETEVENTMASK message to the control
// with the ENM_UPDATE flag ORed into the lParam mask.

BOOL CRichEditDlg::OnInitDialog() 
{
//DWORD	mask;
//RECT	r;

	CPropertyPage::OnInitDialog();

	long mask = m_RichSample.GetEventMask();
	m_RichSample.SetEventMask (mask | ENM_UPDATE | ENM_KEYEVENTS | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS);
	
	m_CharFormat.dwEffects &= ~(CFM_ITALIC | CFM_BOLD | CFM_UNDERLINE
					| CFM_STRIKEOUT | CFM_COLOR | CFM_SIZE | CFM_FACE);

	HICON hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_FORMATBOLD),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlFormatBold.SetIcon (hIcon);
	DeleteObject (hIcon);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_FORMATITALIC),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlFormatItalic.SetIcon (hIcon);
	DeleteObject (hIcon);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_FORMATUNDERLINE),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlFormatUnderline.SetIcon (hIcon);
	DeleteObject (hIcon);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_FORMATSTRIKEOUT),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlFormatStrikeout.SetIcon (hIcon);
	DeleteObject (hIcon);

	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_PARAGRAPHLEFT),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlParaLeft.SetIcon (hIcon);
	DeleteObject (hIcon);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_PARAGRAPHCENTER),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlParaCenter.SetIcon (hIcon);
	DeleteObject (hIcon);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_PARAGRAPHRIGHT),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlParaRight.SetIcon (hIcon);
	DeleteObject (hIcon);

	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_INDENTMORE),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlParaIndentMore.SetIcon (hIcon);
	DeleteObject (hIcon);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_INDENTLESS),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlParaIndentLess.SetIcon (hIcon);
	DeleteObject (hIcon);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_INDENTBULLETS),
							 IMAGE_ICON,
							 16, 16, 0);
	m_ctlParaIndentBullets.SetIcon (hIcon);
	DeleteObject (hIcon);

	m_imageFonts.Create (16, 16, ILC_MASK, 2, 2);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_TRUETYPEFONTS),
							 IMAGE_ICON, 16, 16, 0);
	m_imageFonts.Add (hIcon);
	DeleteObject (hIcon);
	hIcon = (HICON) LoadImage (AfxGetInstanceHandle (),
							 MAKEINTRESOURCE (IDI_PRINTERFONTS),
							 IMAGE_ICON, 16, 16, 0);
	m_imageFonts.Add (hIcon);
	DeleteObject (hIcon);

	m_ctlFontBox.SetImageList (&m_imageFonts);

//
//	Get an enumerated list of fonts and place them
//	in a sorted list.
//
	CWindowDC dc(this);
	FONTDATA fd;
	CString strFont = _T("Times New Roman");
	fd.FontBox = &m_ctlFontBox;
	fd.strFont = strFont;
	fd.Papa = this;
	::EnumFontFamilies ((HDC) dc, NULL, (FONTENUMPROC) AddFontName, (LPARAM) &fd);
//
//	Use the sorted list to load the font combo box.
//
	int nCount = m_FontData.GetCount ();
	POSITION pos = m_FontData.GetHeadPosition ();
	CFontData font = m_FontData.GetHead ();
	for (int n = 0; pos != NULL; ++n)
	{
		font = m_FontData.GetNext (pos);
		COMBOBOXEXITEM cbi;
		memset (&cbi, '\0', sizeof (COMBOBOXEXITEM));
		cbi.iItem = n;
		cbi.mask = CBEIF_IMAGE | CBEIF_TEXT | CBEIF_SELECTEDIMAGE | CBS_SORT;
		cbi.iImage = font.m_nIcon;
		cbi.iSelectedImage = font.m_nIcon;
//		cbi.pszText = (char *) (LPCSTR) font.m_strName;
		cbi.pszText = LPSTR_TEXTCALLBACK;
		m_ctlFontBox.InsertItem (&cbi);
		if (!font.m_strName.CompareNoCase (strFont))
			m_ctlFontBox.SetCurSel (n);
	}

	CHARFORMAT cf;
	memset (&cf,'\0', sizeof (CHARFORMAT));
	strcpy (cf.szFaceName, _T("Times New Roman"));
	cf.yHeight = 20 * 10;
	cf.dwMask = CFM_FACE | CFM_SIZE;
	m_RichSample.SetDefaultCharFormat (cf);
	m_RichSample.SetSel (-1, -1);
	m_ctlPointBox.SelectString (-1, _T("10"));
	m_RichSample.ReplaceSel (_T(""));

	m_RichSample.SetFocus ();
	return FALSE;
}

void CRichEditDlg::OnRichsetcolor() 
{
	CColorDialog	cc (m_clrBack);
	cc.m_cc.lpCustColors = m_clrCustom;
	if (cc.DoModal () == IDCANCEL)
		return;
	m_clrBack = cc.GetColor();
	m_RichSample.SetBackgroundColor (false, m_clrBack);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnRichsettextcolor() 
{
	CHARFORMAT cf;
	memset (&cf, '\0', sizeof (CHARFORMAT));
	cf.dwMask = CFM_COLOR;
	m_RichSample.GetSelectionCharFormat (cf);
	CColorDialog cc (cf.crTextColor);
	cc.m_cc.lpCustColors = m_clrCustom;
	if (cc.DoModal () == IDCANCEL)
		return;
	cf.dwMask = CFM_COLOR;
	cf.dwEffects &= ~CFE_AUTOCOLOR;
	cf.crTextColor  = cc.GetColor ();
	m_RichSample.SetSelectionCharFormat (cf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	CFont *font = GetFont ();
	LOGFONT lf;
	font->GetLogFont (&lf);
	lf.lfEscapement = 600;
	lf.lfOrientation = 600;
	lf.lfQuality = PROOF_QUALITY;
	lf.lfUnderline = TRUE;
	strcpy (lf.lfFaceName, "Arial Bold");
	CFont SlantFont;
	SlantFont.CreateFontIndirect (&lf);
	CFont *fontOld = dc.SelectObject (&SlantFont);

	CRect rc;
	m_ctlFormatBold.GetWindowRect (&rc);
	ScreenToClient (&rc);
	CString text = "Bold";
	dc.SetTextAlign (TA_BASELINE);
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlFormatItalic.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "Italic";
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlFormatUnderline.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "Underline";
	CSize sz = dc.GetTextExtent(text);
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlFormatStrikeout.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "Strikeout";
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlParaLeft.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "Left";
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlParaRight.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "Right";
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlParaCenter.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "Center";
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlParaIndentLess.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "Less";
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlParaIndentMore.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "More";
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);

	m_ctlParaIndentBullets.GetWindowRect (&rc);
	ScreenToClient (&rc);
	text = "Bullets";
	dc.TextOut (rc.left + (rc.right - rc.left) / 2, rc.top - 2, text);
	dc.SelectObject (fontOld);
}

int CALLBACK CRichEditDlg::AddFontName(ENUMLOGFONT *lpelfe, NEWTEXTMETRIC *lpntme, int FontType, LPARAM lParam)
{
static int nItem = 0;

	FONTDATA *fd = (FONTDATA *) lParam;
	CFontData font;
	CRichEditDlg *edit = fd->Papa;
	font.m_strName = lpelfe->elfLogFont.lfFaceName;
	switch (FontType)
	{
		case RASTER_FONTTYPE:
		case DEVICE_FONTTYPE:
			font.m_nIcon = 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -