📄 richeditdlg.cpp
字号:
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 + -