如何向CEditView类附加不同字体和颜色的文本。

cherami 2001-08-29 07:30:53
现在从CEditView类派生一个类,如何在该类的一个方法中实现向自己添加文本,并且文本内容、字体及颜色是根据参数指定的,文本附加到视的末尾。新文本字体和颜色的设置不能影响原来的已经输出的文本。谢谢!
...全文
306 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
smallfool 2001-08-30
  • 打赏
  • 举报
回复
呵呵,是不是扩展一下CEdit,使它支持不同字体。然后用扩展后的CEditEx来SubclassWnd CEditView的CEdit控件。可以嘛?
show 2001-08-30
  • 打赏
  • 举报
回复
用RichEdit 行吗?怎么用呢?
蒋晟 2001-08-30
  • 打赏
  • 举报
回复
〉如何用不同的颜色
CEdit/CEditView只能有一种颜色
show 2001-08-30
  • 打赏
  • 举报
回复
很简单啊!我做过的。
用GetWindowText(str)来获得控件里的内容,也可用CEdit::GetLine(*,*)来逐行获得文本。
然后用,CEdit::SetFocus()获得焦点
CEdet::SetSel(0,-1) 选中所有。

视类用CEditView::ReplaceSel(str)即可。
int n=CEditView::GetWindowTextLength();
CEditView::SetSel(len,len);
CEditView::ReplaceSel(str);

我只是不知道如何用不同的颜色来显示这些字,谁有好的方按吗?
cherami 2001-08-30
  • 打赏
  • 举报
回复
to:panda_w(好想睡啊!)
我的意思是有一个比如CEdit控件,在里面输入一些文本,然后按回车或者按钮,就将该输入控件里面的内容附加到上面的CEditView视中,附加到后面,原来的内容不变。
wmouse 2001-08-30
  • 打赏
  • 举报
回复
学习
panda_w 2001-08-30
  • 打赏
  • 举报
回复
代码:读取文本文件
CString ReadTXT()
{
CFile l_file;
char *lpData = NULL;
int l_Length = 0;

if(!l_file.Open(strFileName,CFile::modeRead))
{
AfxMessageBox("不能读取文件");
return "不能读取文件";
}

strFileName="";//全路径
l_Length = l_file.GetLength();
lpData = new char[l_Length+1];
memset(lpData,0,l_Length+1);

l_file.Read(lpData,l_Length);
l_file.Close();
return CString(lpData);
}
cherami 2001-08-30
  • 打赏
  • 举报
回复
to:111222(啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)
你给出的范例很由有参考价值,但是和我的要求有点不同,那个范例是自己根据设定的关键字将之以特殊的颜色显示出来,而我要的主要是通过一个事件(比如按钮的按下)来添加文本。现在先请解决如何直接向CEditView类附加文本吧。
111222 2001-08-30
  • 打赏
  • 举报
回复
http://www.codeguru.com/editctrl/color_edit.shtml
cherami 2001-08-30
  • 打赏
  • 举报
回复
哦,我搞错了,那个是从CSrollView派生的,看来这个问题是没有解了。
cherami 2001-08-30
  • 打赏
  • 举报
回复
该范例是一个简单的C语言编辑器,可以以不同的颜色显示普通文本和关键字。
cherami 2001-08-30
  • 打赏
  • 举报
回复
但是111222(啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊) 给出的文章的源代码的的视类也是从CEditView继承的啊!只是代码太长,我看得不是很懂。
horsehorse 2001-08-30
  • 打赏
  • 举报
回复
CEdit不论怎么变,还是要调用Windows DLL中定义的标准Edit控件,而它同时只能用一种字体、一种颜色,重载OnPaint更是说笑。还是用CRichEdit吧。
cherami 2001-08-29
  • 打赏
  • 举报
回复
我在VC程序设计上看到这样一个例子:
void CEx05aView::ShowFont(CDC* pDC, int& nPos, int nPoints)
{
TEXTMETRIC tm;
CFont fontText;
CString strText;
CSize sizeText;

fontText.CreateFont(-nPoints * 20, 0, 0, 0, 400, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS, "Arial");
CFont* pOldFont = (CFont*) pDC->SelectObject(&fontText);
pDC->GetTextMetrics(&tm);
TRACE("points = %d, tmHeight = %d, tmInternalLeading = %d,"
" tmExternalLeading = %d\n", nPoints, tm.tmHeight,
tm.tmInternalLeading, tm.tmExternalLeading);
strText.Format("This is %d-point Arial", nPoints);
sizeText = pDC->GetTextExtent(strText);
TRACE("string width = %d, string height = %d\n", sizeText.cx,
sizeText.cy);
pDC->TextOut(0, nPos, strText);
pDC->SelectObject(pOldFont);
nPos -= tm.tmHeight + tm.tmExternalLeading;
}

void CEx05aView::OnDraw(CDC* pDC)
{
int nPosition = 0;

for (int i = 6; i <= 24; i += 2) {
ShowFont(pDC, nPosition, i);
}
TRACE("LOGPIXELSX = %d, LOGPIXELSY = %d\n",
pDC->GetDeviceCaps(LOGPIXELSX),
pDC->GetDeviceCaps(LOGPIXELSY));
TRACE("HORZSIZE = %d, VERTSIZE = %d\n",
pDC->GetDeviceCaps(HORZSIZE),
pDC->GetDeviceCaps(VERTSIZE));
TRACE("HORZRES = %d, VERTRES = %d\n",
pDC->GetDeviceCaps(HORZRES),
pDC->GetDeviceCaps(VERTRES));
}

由此可见我的问题的实现是可行的,问题是有没有什么比较好的方法,而不是用TextOut()方法实现文本的附加,因为这需要计算文本输出的位置,而且只是静态的添加,而我需要的是动态的添加及修改字体颜色等,有没有什么文本附加方法或文本插入方法。(我对VC的函数很不熟悉。刚开始用VC)

蒋晟 2001-08-29
  • 打赏
  • 举报
回复
不行,用CRichEditView吧。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧