从CEditView继承如何设置字体颜色 背景色

storm_yu 2004-09-02 09:33:31
CLogView是从CEditView继承的


在下面着函数中我想设置输出文本的颜色
void CLogView::Message(LPCTSTR lpszMessage)
{
CString strTemp = lpszMessage;
strTemp += _T("\r\n");
int len = GetWindowTextLength();

GetEditCtrl().SetSel(len, len);
GetEditCtrl().ReplaceSel(strTemp);
}


但使用了几个方法都不好用

请问该加哪些语句 实现~~~`


谢谢
...全文
265 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
storm_yu 2004-09-08
  • 打赏
  • 举报
回复
改用RichEdit了

也好是谢谢大家

并学习
storm_yu 2004-09-06
  • 打赏
  • 举报
回复
大哥
我用的是EditView
用RichEditView我会的
GetRichEditView()就可以了

但是在EditView中我改变颜色
她没有反应阿
kuse 2004-09-06
  • 打赏
  • 举报
回复
GetEditCtrl() 得到的就是richedit的CWnd
kuse 2004-09-06
  • 打赏
  • 举报
回复
m_edtKore 是随便一个richedit控件映射的控件变量
wfq771105 2004-09-06
  • 打赏
  • 举报
回复
学习
Mr-Chen 2004-09-06
  • 打赏
  • 举报
回复
引用:

通过向父窗口(在这里父窗口是对话框)发送WM_CTLCOLOR消息,处理这些消息的代码都将在父窗口类中来实现,这显然不利于重用。
更符合面向对象的方法应该是让控件可以处理自己的背景颜色,这样将有利于代码重用。
微软已经认识到这点,从MFC4.0开始提供了一种称为消息反射(Message Reflection)的新机制。
消息反射允许控件自己处理类似WM_CTLCOLOR这样的通知消息(在VC的ClassWizard里显示为=WM_CTLCOLOR)。但MFC为了相后兼容,保留了旧的消息机制,允许这些通知消息能被父窗口处理(虽然后者是不合逻辑的)。
反射消息的消息映射宏与通常的消息映射宏有点微小的区别:它在其常规名字后附加了 _REFLECT 表示。
例如,用于=WM_CTLCOLOR 通知的宏是 ON_WM_CTLCOLOR_REFLECT。

下面举一个通过处理反射消息创建可重用控件的例子:
Handling Reflected Messages: An Example of a Reusable control(根据MSDN Library - July2000 整理)

这个例子创建了一个可重用的CYellowEdit控件。这一控件继承了常规编辑控件的功能,不同就是它在黄色背景中显示黑字。(当然,还可以添加其它功能。)

步骤如下:

1.在一个已存在的应用程序添加一个对话框。

2.使用 ClassWizard 创建一个基于 CEdit 类的新CYellowEdit类。

3.在 CYellowEdit 类中添加三个成员变量。

COLORREF m_clrText; //记录文本颜色
COLORREF m_clrBkgnd; //记录背景颜色
CBrush m_brBkgnd; //用于绘制背景的刷子


4.在构造函数中初始化这些成员变量:
CYellowEdit::CYellowEdit()
{
m_clrText = RGB( 0, 0, 0 );
m_clrBkgnd = RGB( 255, 255, 0 );
m_brBkgnd.CreateSolidBrush( m_clrBkgnd );
}

5.使用 ClassWizard 给您的 CYellowEdit 类为 =WM_CTLCOLOR 反射消息添加一个处理函数。注意,消息列表中的消息名称前的等于号表明该消息是个可以被反射的消息。ClassWizard 会为您添加下面的消息映射宏以及相应的函数骨架:

ON_WM_CTLCOLOR_REFLECT()

……

HBRUSH CYellowEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
// TODO: Change any attributes of the DC here

// TODO: Return a non-NULL brush if the
// parent's handler should not be called
return NULL;
}

用下面的代码代替函数的主体。这里的程序代码很简单,你可以在这里添加更多的定制功能。

pDC->SetTextColor( m_clrText ); // text
pDC->SetBkColor( m_clrBkgnd ); // text bkgnd
return m_brBkgnd; // ctl bkgnd

6.在对话框中创建一个编辑控件,为这一控件绑定一个控件类型的成员变量。注意在为对话框增添成员变量时,选择“CYellowEdit”作为您的变量类型。

随后,ClassWizard会提醒你在你的对话框头文件中添加 CYellowEdit 类的头文件。记得include它的头文件。

对所有想定制这一颜色的编辑控件,只要绑定一个CYellowEdit类型的变量即可。
编译并运行您的程序,该编辑控件将显示一个黄色的背景。
好了,可重用的定制控件产生了。
将CyellowEdit类添加到Galllery 中去,即可实现在其它工程项目中复用这一控件
Mr-Chen 2004-09-06
  • 打赏
  • 举报
回复
重载WM_CTLCOLOR
vyzm 2004-09-03
  • 打赏
  • 举报
回复

------------------------------------
test
------------------------------------
CSDN论坛新助手 CSDN's forum Explorer》
全栈无侠 2004-09-03
  • 打赏
  • 举报
回复
可以重载WM_CTLCOLOR
kuse 2004-09-03
  • 打赏
  • 举报
回复
CHARFORMAT cf;
memset(&cf, 0, sizeof(CHARFORMAT));
m_edtKore.GetDefaultCharFormat(cf);
cf.dwMask &=CFM_COLOR;
cf.dwEffects ^= CFE_AUTOCOLOR; // 为了让设置颜色有效
cf.crTextColor = colFight; // 新的颜色
m_edtKore.SetDefaultCharFormat(cf);
storm_yu 2004-09-03
  • 打赏
  • 举报
回复
没有人知道吗?
storm_yu 2004-09-03
  • 打赏
  • 举报
回复
m_edtKore

是谁的成员?

16,472

社区成员

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

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

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