描述:
红红黑黑黑黑黑黑黑黑黑黑黑黑
红红黑黑黑黑黑黑黑黑黑黑黑黑
红红黑黑黑黑黑黑黑黑黑黑黑黑
红红黑黑黑黑黑黑黑黑黑黑黑黑
红红黑黑黑黑黑黑黑黑黑黑黑黑
红红黑黑黑黑黑黑黑黑黑黑黑黑
红红黑黑黑黑黑黑黑黑黑黑黑黑
红红黑黑黑黑黑黑黑黑黑黑黑黑
long lenth=redit->GetTextLength();
FINDTEXTEX ft;
ft.chrg.cpMin=1;
ft.chrg.cpMax=-1;
ft.lpstrText="\r";
for (ft.chrg.cpMin=1;ft.chrg.cpMin<=lenth;ft.chrg.cpMin++)
{
long n=redit->FindText(0,&ft);
if (n!=-1)
{
redit->SetSel(ft.chrgText.cpMin,ft.chrgText.cpMin+11);
redit->SetSelectionCharFormat(cf);
}
}
我用这样的方法,可以实现
因为是先sel,再format,再sel,再format,这样每次屏幕都会闪烁很长时间.不知道怎么解决
解决方案1:
我这里有个richedit的类,是通过选中文字然后右键菜单的字体选项来改变字体大小和颜色 你可以参考一下,把它改字体的那段提炼出来就可以了
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
// MyRichEdit.cpp : implementation file
//
#include "stdafx.h"
#include "MyRichEdit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define ID_RICH_UNDO 101
#define ID_RICH_CUT 102
#define ID_RICH_COPY 103
#define ID_RICH_PASTE 104
#define ID_RICH_CLEAR 105
#define ID_RICH_SELECTALL 106
#define ID_RICH_SETFONT 107
/////////////////////////////////////////////////////////////////////////////
// CMyRichEdit
CMyRichEdit::CMyRichEdit()
{
}
CMyRichEdit::~CMyRichEdit()
{
}
BEGIN_MESSAGE_MAP(CMyRichEdit, CRichEditCtrl)
//{{AFX_MSG_MAP(CMyRichEdit)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_RICH_COPY, OnCopy)
ON_COMMAND(ID_RICH_CUT, OnCut)
ON_COMMAND(ID_RICH_PASTE, OnPaste)
ON_COMMAND(ID_RICH_SELECTALL, OnSelectall)
ON_COMMAND(ID_RICH_UNDO, OnUndo)
ON_COMMAND(ID_RICH_CLEAR, OnClear)
ON_COMMAND(ID_RICH_SETFONT, OnSelectfont)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyRichEdit message handlers
void CMyRichEdit::OnRButtonDown(UINT nFlags, CPoint point)
{
//设置为焦点
SetFocus();
//创建一个弹出式菜单
CMenu popmenu;
popmenu.CreatePopupMenu();
//添加菜单项目
popmenu.AppendMenu(0, ID_RICH_UNDO, "撤消(&U)\tCtrl+Z");
popmenu.AppendMenu(0, MF_SEPARATOR);
popmenu.AppendMenu(0, ID_RICH_CUT, "剪切(&X)\tCtrl+X");
popmenu.AppendMenu(0, ID_RICH_COPY, "复制(&C)\tCtrl+C");
popmenu.AppendMenu(0, ID_RICH_PASTE, "粘贴(&P)\tCtrl+V");
popmenu.AppendMenu(0, ID_RICH_CLEAR, "清除(&L)");
popmenu.AppendMenu(0, MF_SEPARATOR);
popmenu.AppendMenu(0, ID_RICH_SELECTALL, "全选(&A)\tCtrl+A");
popmenu.AppendMenu(0, MF_SEPARATOR);
popmenu.AppendMenu(0, ID_RICH_SETFONT, "字体(&F)");
//初始化菜单项
UINT nUndo=(CanUndo() ? 0 : MF_GRAYED );
popmenu.EnableMenuItem(ID_RICH_UNDO, MF_BYCOMMAND|nUndo);
UINT nSel=((GetSelectionType()!=SEL_EMPTY) ? 0 : MF_GRAYED) ;
popmenu.EnableMenuItem(ID_RICH_CUT, MF_BYCOMMAND|nSel);
popmenu.EnableMenuItem(ID_RICH_COPY, MF_BYCOMMAND|nSel);
popmenu.EnableMenuItem(ID_RICH_CLEAR, MF_BYCOMMAND|nSel);
UINT nPaste=(CanPaste() ? 0 : MF_GRAYED) ;
popmenu.EnableMenuItem(ID_RICH_PASTE, MF_BYCOMMAND|nPaste);
//显示菜单
CPoint pt;
GetCursorPos(&pt);
popmenu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
popmenu.DestroyMenu();
CRichEditCtrl::OnRButtonDown(nFlags, point);
}
void CMyRichEdit::OnSelectfont()
{
// TODO: Add your command handler code here
CHARFORMAT cf;
LOGFONT lf;
memset(&cf, 0, sizeof(CHARFORMAT));
memset(&lf, 0, sizeof(LOGFONT));
//判断是否选择了内容
BOOL m_bSelect = (GetSelectionType() != SEL_EMPTY) ? TRUE : FALSE;
if (m_bSelect)
{
GetSelectionCharFormat(cf);
}
else
{
GetDefaultCharFormat(cf);
}
//得到相关字体属性
BOOL bIsBold = cf.dwEffects & CFE_BOLD;
BOOL bIsItalic = cf.dwEffects & CFE_ITALIC;
BOOL bIsUnderline = cf.dwEffects & CFE_UNDERLINE;
BOOL bIsStrickout = cf.dwEffects & CFE_STRIKEOUT;
//设置属性
lf.lfCharSet = cf.bCharSet;
lf.lfHeight = cf.yHeight/15;
lf.lfPitchAndFamily = cf.bPitchAndFamily;
lf.lfItalic = bIsItalic;
lf.lfWeight = (bIsBold ? FW_BOLD : FW_NORMAL);
lf.lfUnderline = bIsUnderline;
lf.lfStrikeOut = bIsStrickout;
sprintf(lf.lfFaceName, cf.szFaceName);
CFontDialog dlg(&lf);
dlg.m_cf.rgbColors = cf.crTextColor;
if (dlg.DoModal() == IDOK)
{
dlg.GetCharFormat(cf);//获得所选字体的属性
if (m_bSelect)
SetSelectionCharFormat(cf); //为选定的内容设定所选字体
else
SetWordCharFormat(cf); //为将要输入的内容设定字体
}
}
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
#if !defined(AFX_MY
您可能想查找下面的文章:
- 怎么在RichEdit中插入进度条
- 如何通过CRichEditCntrItem和ActiveX控件通讯,如调用控件的属性和方法?
- 自己开发的带窗体的OCX控件,在窗体上添加richedit控件?
- 请问在ATL写的DLL中如何使用RICHEDIT控件?谢谢了
- 我在ACTIVEX中使用了一個對話框,在對話框上加入richeditctrl,如果在ie中使用,就不顯示,不知道爲什麽?
- 那里有RichEdit控件下载?
- 怎样在RichEdit控件中提取位图信息
- MFCActiveX控件插入到RichEdit的问题
- RichEdit中插入Gif动画的几个问题情高手赐教----网上等
- vc关于richedit中gif播放控件的问题