【问题标题】:Want to show colored box around Richedit control in MFC at runtime想要在运行时在 MFC 中的 Richedit 控件周围显示彩色框
【发布时间】:2015-10-04 05:08:35
【问题描述】:

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

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

【问题讨论】:

  • 另一种处理方法是更改​​对话框本身的背景颜色。在此处检查stackoverflow.com/questions/17051982/…,以便您可以从编辑控件中获取矩形,对其进行充气,然后根据需要为该区域着色

标签: mfc background-color richedit


【解决方案1】:

可能有更好的方法来实现这一点,但是,以下应该可行。如果您从 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 您应该考虑在派生的富编辑控件中使用成员变量或标志,该控件默认为您想要基于“一些健康)状况”。然后定义一个成员方法(或一些其他机制),允许您在呈现控件之前更新绘图属性的当前状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 2013-10-13
相关资源
最近更新 更多