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

时间:2022-02-24 22:14:54
现在从CEditView类派生一个类,如何在该类的一个方法中实现向自己添加文本,并且文本内容、字体及颜色是根据参数指定的,文本附加到视的末尾。新文本字体和颜色的设置不能影响原来的已经输出的文本。谢谢!

15 个解决方案

#1


不行,用CRichEditView吧。

#2


我在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)

#3


http://www.codeguru.com/editctrl/color_edit.shtml

#4


to:111222(啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)
你给出的范例很由有参考价值,但是和我的要求有点不同,那个范例是自己根据设定的关键字将之以特殊的颜色显示出来,而我要的主要是通过一个事件(比如按钮的按下)来添加文本。现在先请解决如何直接向CEditView类附加文本吧。

#5


代码:读取文本文件
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);
}

#6


学习

#7


to:panda_w(好想睡啊!)
我的意思是有一个比如CEdit控件,在里面输入一些文本,然后按回车或者按钮,就将该输入控件里面的内容附加到上面的CEditView视中,附加到后面,原来的内容不变。

#8


很简单啊!我做过的。
用GetWindowText(str)来获得控件里的内容,也可用CEdit::GetLine(*,*)来逐行获得文本。
然后用,CEdit::SetFocus()获得焦点
       CEdet::SetSel(0,-1) 选中所有。

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

我只是不知道如何用不同的颜色来显示这些字,谁有好的方按吗?

#9


〉如何用不同的颜色
CEdit/CEditView只能有一种颜色

#10


用RichEdit 行吗?怎么用呢?

#11


呵呵,是不是扩展一下CEdit,使它支持不同字体。然后用扩展后的CEditEx来SubclassWnd CEditView的CEdit控件。可以嘛?

#12


CEdit不论怎么变,还是要调用Windows DLL中定义的标准Edit控件,而它同时只能用一种字体、一种颜色,重载OnPaint更是说笑。还是用CRichEdit吧。

#13


但是111222(啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊) 给出的文章的源代码的的视类也是从CEditView继承的啊!只是代码太长,我看得不是很懂。

#14


该范例是一个简单的C语言编辑器,可以以不同的颜色显示普通文本和关键字。

#15


哦,我搞错了,那个是从CSrollView派生的,看来这个问题是没有解了。

#1


不行,用CRichEditView吧。

#2


我在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)

#3


http://www.codeguru.com/editctrl/color_edit.shtml

#4


to:111222(啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)
你给出的范例很由有参考价值,但是和我的要求有点不同,那个范例是自己根据设定的关键字将之以特殊的颜色显示出来,而我要的主要是通过一个事件(比如按钮的按下)来添加文本。现在先请解决如何直接向CEditView类附加文本吧。

#5


代码:读取文本文件
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);
}

#6


学习

#7


to:panda_w(好想睡啊!)
我的意思是有一个比如CEdit控件,在里面输入一些文本,然后按回车或者按钮,就将该输入控件里面的内容附加到上面的CEditView视中,附加到后面,原来的内容不变。

#8


很简单啊!我做过的。
用GetWindowText(str)来获得控件里的内容,也可用CEdit::GetLine(*,*)来逐行获得文本。
然后用,CEdit::SetFocus()获得焦点
       CEdet::SetSel(0,-1) 选中所有。

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

我只是不知道如何用不同的颜色来显示这些字,谁有好的方按吗?

#9


〉如何用不同的颜色
CEdit/CEditView只能有一种颜色

#10


用RichEdit 行吗?怎么用呢?

#11


呵呵,是不是扩展一下CEdit,使它支持不同字体。然后用扩展后的CEditEx来SubclassWnd CEditView的CEdit控件。可以嘛?

#12


CEdit不论怎么变,还是要调用Windows DLL中定义的标准Edit控件,而它同时只能用一种字体、一种颜色,重载OnPaint更是说笑。还是用CRichEdit吧。

#13


但是111222(啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊) 给出的文章的源代码的的视类也是从CEditView继承的啊!只是代码太长,我看得不是很懂。

#14


该范例是一个简单的C语言编辑器,可以以不同的颜色显示普通文本和关键字。

#15


哦,我搞错了,那个是从CSrollView派生的,看来这个问题是没有解了。