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

📄 richeditdlg.cpp

📁 这些源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			break;
		case TRUETYPE_FONTTYPE:
			font.m_nIcon = 0;
			break;
	}
	POSITION pos;
	if (edit->m_FontData.GetCount () == 0)
	{
		edit->m_FontData.AddHead (font);
		return (TRUE);
	}
	pos = edit->m_FontData.GetHeadPosition ();
	CFontData data;
	int nCount = edit->m_FontData.GetCount ();
	data = edit->m_FontData.GetHead ();
	for (int n = 0; n < nCount; ++n)
	{
		int nResult = data.m_strName.CompareNoCase (font.m_strName);
		if (nResult > 0)
			break;
//		{
//			bar->m_FontData.InsertAfter (pos, font);
//			return (TRUE);
//		}
		data = edit->m_FontData.GetNext (pos);
	}
	if (pos == NULL)
	{
		if (font.m_strName.CompareNoCase (data.m_strName) < 0)
            {
				pos = edit->m_FontData.GetTailPosition ();
                edit->m_FontData.InsertBefore (pos, font);
            }
            else
                edit->m_FontData.AddTail (font);
			return (TRUE);
	}
	edit->m_FontData.GetPrev (pos);
	edit->m_FontData.InsertBefore (pos, font);
	return (TRUE);
}

void CRichEditDlg::OnSelchangeFontbox() 
{
	CHARFORMAT cf;
	DWORD dwMask = m_RichSample.GetSelectionCharFormat (cf);
	int nSel = m_ctlFontBox.GetCurSel ();
	long nStart, nEnd;
	m_RichSample.GetSel (nStart, nEnd);
	COMBOBOXEXITEM cbi;
	memset (&cbi, '\0', sizeof (COMBOBOXEXITEM));
	cbi.iItem = nSel;
	cbi.mask = CBEIF_TEXT;
	TCHAR	szFont[_MAX_PATH];
	cbi.pszText = szFont;
	cbi.cchTextMax = _MAX_PATH;
	m_ctlFontBox.GetItem (&cbi);
	cf.dwMask = CFM_FACE;
	strcpy (cf.szFaceName, szFont);
	m_RichSample.SetSelectionCharFormat (cf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnSelchangePointbox() 
{
	CHARFORMAT cf;
	DWORD dwMask = m_RichSample.GetSelectionCharFormat (cf);
	int nSel = m_ctlPointBox.GetCurSel ();
	if (nSel < 0)
		return;
	CString strSel;
	m_ctlPointBox.GetLBText (nSel, strSel);
	int nSize = atoi ((LPCSTR) strSel);
	if (nSize < 6)
		return;
	cf.yHeight = 20 * nSize;
	cf.dwMask = CFM_SIZE;
	m_RichSample.SetSelectionCharFormat (cf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnFormatBold() 
{
	CHARFORMAT cf;
	m_RichSample.GetSelectionCharFormat (cf);
	cf.dwMask |= CFM_BOLD;
	cf.dwEffects ^= CFE_BOLD;
	m_RichSample.SetSelectionCharFormat (cf);
	m_ctlFormatBold.SetCheck (
					cf.dwEffects & CFE_BOLD ?
					1 : 0);
	if (cf.dwEffects & CFE_BOLD)
		m_ctlFormatBold.SetCheck (1);
	else
		m_ctlFormatBold.SetCheck (0);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnFormatItalic() 
{
	CHARFORMAT cf;
	m_RichSample.GetSelectionCharFormat (cf);
	cf.dwMask |= CFM_ITALIC;
	cf.dwEffects ^= CFE_ITALIC;
	m_RichSample.SetSelectionCharFormat (cf);
	m_ctlFormatItalic.SetCheck (
					cf.dwEffects & CFE_ITALIC ?
					1 : 0);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnFormatStrikeout() 
{
	CHARFORMAT cf;
	m_RichSample.GetSelectionCharFormat (cf);
	cf.dwMask |= CFM_STRIKEOUT;
	cf.dwEffects ^= CFE_STRIKEOUT;
	m_RichSample.SetSelectionCharFormat (cf);
	m_ctlFormatStrikeout.SetCheck (
					cf.dwEffects & CFE_STRIKEOUT ?
					1 : 0);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnFormatUnderline() 
{
	CHARFORMAT cf;
	m_RichSample.GetSelectionCharFormat (cf);
	cf.dwMask |= CFM_UNDERLINE;
	cf.dwEffects ^= CFE_UNDERLINE;
	m_RichSample.SetSelectionCharFormat (cf);
	m_ctlFormatUnderline.SetCheck (
					cf.dwEffects & CFE_UNDERLINE ?
					1 : 0);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnParagraphleft() 
{
	PARAFORMAT pf;
	m_RichSample.GetParaFormat(pf);
	pf.dwMask = PFM_ALIGNMENT;
	pf.wAlignment = PFA_LEFT;
	m_RichSample.SetParaFormat(pf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnParagraphcenter() 
{
	PARAFORMAT pf;
	m_RichSample.GetParaFormat(pf);
	pf.dwMask = PFM_ALIGNMENT;
	pf.wAlignment = PFA_CENTER;
	m_RichSample.SetParaFormat(pf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnParagraphright() 
{
	PARAFORMAT pf;
	m_RichSample.GetParaFormat(pf);
	pf.dwMask = PFM_ALIGNMENT;
	pf.wAlignment = PFA_RIGHT;
	m_RichSample.SetParaFormat(pf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnIndentless() 
{
PARAFORMAT	pf;
CHARFORMAT	cf;

	memset (&pf, '\0', sizeof (PARAFORMAT));
	pf.cbSize = sizeof (PARAFORMAT);
	m_RichSample.GetParaFormat (pf);
	m_RichSample.GetSelectionCharFormat (cf);
	pf.dwMask = PFM_STARTINDENT | PFM_RIGHTINDENT;
	if (pf.dxRightIndent)
		pf.dxRightIndent -= cf.yHeight;
	if (pf.dxStartIndent)
		pf.dxStartIndent -= cf.yHeight;
	m_RichSample.SetParaFormat (pf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnIndentmore() 
{
PARAFORMAT	pf;
CHARFORMAT	cf;

	memset (&pf, '\0', sizeof (PARAFORMAT));
	pf.cbSize = sizeof (PARAFORMAT);
	m_RichSample.GetParaFormat (pf);
	m_RichSample.GetSelectionCharFormat (cf);
	pf.dwMask = PFM_STARTINDENT | PFM_RIGHTINDENT;
	pf.dxStartIndent += cf.yHeight;
	pf.dxRightIndent += cf.yHeight;
	m_RichSample.SetParaFormat (pf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnIndentbullets() 
{
PARAFORMAT	pf;
CHARFORMAT	cf;

	memset (&pf, '\0', sizeof (PARAFORMAT));
	pf.cbSize = sizeof (PARAFORMAT);
	m_RichSample.GetParaFormat (pf);
	m_RichSample.GetSelectionCharFormat (cf);
	pf.dwMask = PFM_NUMBERING | PFM_OFFSET;
	pf.wNumbering ^= PFN_BULLET;
	if (pf.wNumbering & PFN_BULLET)
	{
		pf.dxOffset = cf.yHeight;
	}
	else
	{
		pf.dwMask |= PFM_STARTINDENT | PFM_RIGHTINDENT;
		pf.dxOffset = 0;
		pf.dxStartIndent = 0;
		pf.dxRightIndent = 0;
	}
	pf.dwMask |= PFM_NUMBERING;
	m_RichSample.SetParaFormat (pf);
	m_RichSample.SetFocus ();
}

void CRichEditDlg::OnMsgfilterRichSample(NMHDR* pNMHDR, LRESULT* pResult) 
{
	MSGFILTER *pMsgFilter = reinterpret_cast<MSGFILTER *>(pNMHDR);
	// TODO: The control will not send this notification unless you override the
	// CPropertyPage::OnInitDialog() function to send the EM_SETEVENTMASK message
	// to the control with either the ENM_KEYEVENTS or ENM_MOUSEEVENTS flag 
	// ORed into the lParam mask.
	
	// TODO: Add your control notification handler code here

	PARAFORMAT	pf;
	CHARFORMAT	cf;

	*pResult = 0;

	if (pMsgFilter->msg == WM_CHAR)
	{
		if (pMsgFilter->wParam == 0x0d)
		{
			TCHAR text[] = {_T((char) 0xB6), _T((char) 0x0a), _T(0x09), 0};
			m_RichSample.ReplaceSel (text, TRUE);
			*pResult = 1;
		}			
	}
	cf.dwMask = CFM_FACE | CFM_BOLD | CFM_ITALIC | CFM_STRIKEOUT | CFM_UNDERLINE;
	memset (&pf, '\0', sizeof (PARAFORMAT));
	pf.cbSize = sizeof (PARAFORMAT);
	m_RichSample.GetParaFormat (pf);
	m_RichSample.GetSelectionCharFormat (cf);
	if (cf.dwMask & CFM_FACE)
	{
		int nCount = 0;
		POSITION pos = m_FontData.GetHeadPosition ();
		while (pos != NULL)
		{
			CFontData data = m_FontData.GetNext (pos);
			if (!strcmp ((LPCSTR) data.m_strName, cf.szFaceName))
				break;
			++nCount;
		}
		if (pos != NULL)
			m_ctlFontBox.SetCurSel (nCount);
	}
	else
		m_ctlFontBox.SetCurSel (-1);

	if (cf.dwMask & CFM_SIZE)
	{
		CString strText;
		strText.Format ("%d", cf.yHeight / 20);
		int nPos = m_ctlPointBox.FindStringExact (-1, (LPCSTR) strText);
		if (nPos >= 0)
			m_ctlPointBox.SetCurSel (nPos);
	}
	else
		m_ctlPointBox.SetCurSel (-1);

//
//	The format buttons are tri-state. Set their
//	proper states.
//
	if (cf.dwMask & CFM_BOLD)
		m_ctlFormatBold.SetCheck (cf.dwEffects & CFE_BOLD ?
									TRUE : FALSE);
	else
		m_ctlFormatBold.SetCheck (2);
	if (cf.dwMask & CFM_ITALIC)
		m_ctlFormatItalic.SetCheck (cf.dwEffects & CFE_ITALIC ?
									TRUE : FALSE);
	else
		m_ctlFormatItalic.SetCheck (2);

	if (cf.dwMask & CFM_UNDERLINE)
		m_ctlFormatUnderline.SetCheck (cf.dwEffects & CFE_UNDERLINE ?
									TRUE : FALSE);
	else
		m_ctlFormatUnderline.SetCheck (2);

	if (cf.dwMask & CFM_STRIKEOUT)
		m_ctlFormatStrikeout.SetCheck (cf.dwEffects & CFE_STRIKEOUT ?
									TRUE : FALSE);
	else
		m_ctlFormatStrikeout.SetCheck (2);

	if (pf.dwMask = PFM_ALIGNMENT)
	{
		switch (pf.wAlignment)
		{
			case PFA_LEFT:
				m_ctlParaLeft.SetCheck (1);
				m_ctlParaRight.SetCheck (0);
				m_ctlParaCenter.SetCheck (0);
				break;
			case PFA_RIGHT:
				m_ctlParaLeft.SetCheck (0);
				m_ctlParaRight.SetCheck (1);
				m_ctlParaCenter.SetCheck (0);
				break;
			case PFA_CENTER:
				m_ctlParaLeft.SetCheck (0);
				m_ctlParaRight.SetCheck (0);
				m_ctlParaCenter.SetCheck (1);
				break;
		}
	}
	else
	{
		m_ctlParaLeft.SetCheck (2);
		m_ctlParaRight.SetCheck (2);
		m_ctlParaCenter.SetCheck (2);
	}
}

void CRichEditDlg::OnGetdispinfoFontbox(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	NMCOMBOBOXEX *pData = (NMCOMBOBOXEX *) pNMHDR;
	COMBOBOXEXITEM *pItem = &pData->ceItem;
	if (pItem->mask & CBEIF_TEXT)
	{
		POSITION pos = m_FontData.FindIndex (pItem->iItem);
		CFontData cfd = m_FontData.GetAt (pos);
		::lstrcpy (pItem->pszText, (LPCSTR) cfd.m_strName);
	}
	*pResult = 0;
}

⌨️ 快捷键说明

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