【问题标题】:Is there a better way to underline the first word in a CStatic control?有没有更好的方法来强调 CStatic 控件中的第一个单词?
【发布时间】:2013-06-22 09:31:04
【问题描述】:

我有一个二维字符数组lineData 和一个bools、linesToUnderline 的数组。 lineData 仅存储文本。 linesToUnderlinelineData 中的每一行存储一个真或假。 lineData 中的每一行都以某种方式放入一个静态控件(动态创建)中以显示给用户。

现在如果linesToUnderline[i] = true (for 0 numLines),我需要显示只有第一个单词下划线的行,其余文本正常显示。

我在说什么看起来像:

所以目前,我想做什么:

  1. 如果linesToUnderline[i] = false,请转到步骤 4。
  2. lineData 中获取第一个单词,将其放入静态控件中,将该控件的字体设置为带下划线。
  3. lineData 中删除第一个单词。
  4. 将起始 X 位置增加lineData 的像素长度。
  5. lineData 放入静态控件中,从位置 X、Y 开始。
  6. 如果i numLines 转到步骤1。
  7. 停下来。

你觉得我的方法怎么样?我觉得必须有更好的方法来做到这一点。如果有,谁能帮帮我?

【问题讨论】:

  • 您可以在 OnPaint 方法中自己绘制下划线。这对我来说看起来更容易,但你的方法也应该有效。

标签: c++ mfc underline


【解决方案1】:

这个code project article 通过继承一个静态控件来实现一个超链接控件。您可以将其用作进行自定义下划线的基础。您所要做的就是简化代码。

【讨论】:

    【解决方案2】:

    您建议的方法不起作用。该控件一次仅使用一种字体(用于其所有文本),并且它不提供在 X、Y 处附加文本的方法。

    您必须子类化控件并自己在 WM_PAINT 中绘制文本。您的绘制代码可以提供必要的功能。

    【讨论】:

    • 我认为他想为非下划线部分添加第二个静态控件。
    • 正如@Michael 所说,我打算添加两个控件。但是,这种方法听起来更容易。有什么例子可以指点我吗?
    猜你喜欢
    • 2015-08-19
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2018-02-15
    • 1970-01-01
    • 2012-01-17
    相关资源
    最近更新 更多