要在运行时在MFC中的Richedit控件周围显示彩色框吗

要在运行时在MFC中的Richedit控件周围显示彩色框吗,mfc,background-color,richedit,Mfc,Background Color,Richedit,我有一个mfc应用程序。我在对话框上有一些richedit控件。我想在控件周围显示一个黄色填充框。这样做的方法是什么 我试图围绕现有的richedit ctrl创建一个更丰富的编辑ctrl,并在其变量上使用SetBackgroundColor,但它为整个区域着色,而其他richedit ctrl变得不可见。另外,我想在运行时更改周围的颜色。 请帮帮我。我被这件事难住了。也许有更好的方法来完成这件事,但是,下面的方法应该行得通。如果您从CRichEditCtrl派生自己的类,那么可以利用WM_N

我有一个mfc应用程序。我在对话框上有一些richedit控件。我想在控件周围显示一个黄色填充框。这样做的方法是什么

我试图围绕现有的richedit ctrl创建一个更丰富的编辑ctrl,并在其变量上使用SetBackgroundColor,但它为整个区域着色,而其他richedit ctrl变得不可见。另外,我想在运行时更改周围的颜色。
请帮帮我。我被这件事难住了。

也许有更好的方法来完成这件事,但是,下面的方法应该行得通。如果您从CRichEditCtrl派生自己的类,那么可以利用WM_NCPAINT消息来呈现边框。类似于

void RichEdit::OnNcPaint()
    {
    CPaintDC dc(this); // device context for painting
    CRect rect;
    GetWindowRect(&rect);
    ScreenToClient(rect);

    CPen pen;
    pen.CreatePen(PS_SOLID, 10, RGB(255, 255, 0));
    dc.SelectObject(pen);
    dc.Rectangle(&rect);

    CHARFORMAT cf = { 0 };
    int txtLen = GetTextLength();

    cf.cbSize = sizeof(cf);
    cf.dwMask = CFM_ITALIC;

    SetSel(txtLen, -1); ReplaceSel("Some text"); 

    // Apply formating to the just inserted text.
    SetSel(txtLen, GetTextLength());
    SetSelectionCharFormat(cf);
    SetFocus();

    // Do not call CRichEditCtrl::OnNcPaint() for painting messages
    }
将边框呈现为黄色,并写入相应的文本。下面是它的样子


黄色边框是在编辑的客户端区域内还是在外部?我这样问是因为钢笔的宽度为10,那么它实际在哪里居中?@rrirower当我绘制RichEdit ctrl时,您的解决方案第一次运行良好。但在开始时,我希望它是默认颜色,在运行时,当我的代码进入某个条件时,我希望这个框变为黄色,然后在遇到其他条件时,我希望它的颜色更改为原始颜色。请建议在这种特殊情况下应该做什么。@Robson笔宽10是任意的。如果您使用Spy++监视窗口,您会看到绘制发生在窗口的客户端区域之外,但在非客户端区域内。@SGP您应该在派生的rich edit控件中使用一个成员变量或标志,该控件默认为您要基于其使用的颜色(以及任何其他属性,如笔宽)“某些条件”。然后定义一个成员方法(或其他机制)这允许您在呈现控件之前更新图形属性的当前状态。另一种处理方法是更改对话框本身的背景色。请在此处选中它,以便可以从编辑控件获取rect,将其充气,然后根据需要为该区域着色