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