显示一窜字符,想让其中某个子窜的颜色不一样,有什么好办法?

时间:2021-10-24 14:43:10
比如
CString strSource("hello你好吗");
dc.DrawText(strSource,rc,DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS);
1 若要让 "你好" 这个子串颜色不同,如何实现?
2 假设我的strSource很长,用dc.DrawText后在我的rc内自动换行了,我如何让任意某个
  子字符窜的颜色不同呢?

17 个解决方案

#1


顶。
好像没有什么好方法,只能分开做吧;至于2和1没什么不一样吧。

#2


好像用RichEditView容易做吧?

#3


自己顶

#4


先输出 “hello”
设置DC的颜色,
再输出 “你好”
再恢复DC的颜色,
又输出 “吗”。

如果在 RichEdit控件中,你可以通过设置字符串的颜色达到目的。事实上系统在显示 RichEdit控件的内容时也是按上述步骤进行的,只不过用了RichEdit控件就不需要你自己动手写这个过程而已。

#5


用一个List 保存下来,再组合,随便你怎么弄都可以

#6


同意icansaymyabc(学习与进步)的观点

#7


icansaymyabc(学习与进步):你的方法可以实现一行的情况,若换行了呢?
我其实是想实现如下功能:已经第一次显示了的字符窜,当我后来想用查找的方法找到某个
子字符窜,然后把找到的子字符窜变成其他颜色(就像用google,csdn中的搜索一样)。有什么好办法?

#8


哭泣的仙人掌:用list拆分字符串可以,但若想显示时用控制dc.DrawText(strSource,rc,DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS)实现自动换行就麻烦了。

#9


icansaymyabc(学习与进步):你的方法可以实现一行的情况,若换行了呢?
我其实是想实现如下功能:已经第一次显示了的字符窜,当我后来想用查找的方法找到某个
子字符窜,然后把找到的子字符窜变成其他颜色(就像用google,csdn中的搜索一样)。有什么好办法?

如果你找到了这个字符串先用背景色覆盖字符串所显示的范围,一般为矩形,所以你可以画个矩形(也可以用其他方法覆盖)来覆盖,这样原先的字符串消失,然后你再用你想要的颜色在范围内重新显示刚才被覆盖的字符串就可以了

#10


rockersz:如果你找到了这个字符串先用背景色覆盖字符串所显示的范围,一般为矩形,所以你可以画个矩形(也可以用其他方法覆盖)来覆盖,这样原先的字符串消失,然后你再用你想要的颜色在范围内重新显示刚才被覆盖的字符串就可以了


关键我想知道如何定位我搜索到的子字符串的位置(坐标位置)?
我已经用dc.DrawText(strSource,rc,DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS)的方法去画了
我的原字符串。

无论如何,非常感谢楼上诸位的参与,我一定会给分给各位的。
现在我的关键问题还是没有解决。

#11


如果使用DrawText函数的话,在rc这个矩形中画,具体怎么花就要看会面的参数(DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS)了。

当然你还可以使用TextOut()函数,具体可以看看msdn。很简单的

#12


拆分

#13


用TextOut()无法自动换行啊

#14


在list中你可以自己控制换行

#15


suisf2002:
我现在是在Dialog中

#16


up

#17


up

#1


顶。
好像没有什么好方法,只能分开做吧;至于2和1没什么不一样吧。

#2


好像用RichEditView容易做吧?

#3


自己顶

#4


先输出 “hello”
设置DC的颜色,
再输出 “你好”
再恢复DC的颜色,
又输出 “吗”。

如果在 RichEdit控件中,你可以通过设置字符串的颜色达到目的。事实上系统在显示 RichEdit控件的内容时也是按上述步骤进行的,只不过用了RichEdit控件就不需要你自己动手写这个过程而已。

#5


用一个List 保存下来,再组合,随便你怎么弄都可以

#6


同意icansaymyabc(学习与进步)的观点

#7


icansaymyabc(学习与进步):你的方法可以实现一行的情况,若换行了呢?
我其实是想实现如下功能:已经第一次显示了的字符窜,当我后来想用查找的方法找到某个
子字符窜,然后把找到的子字符窜变成其他颜色(就像用google,csdn中的搜索一样)。有什么好办法?

#8


哭泣的仙人掌:用list拆分字符串可以,但若想显示时用控制dc.DrawText(strSource,rc,DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS)实现自动换行就麻烦了。

#9


icansaymyabc(学习与进步):你的方法可以实现一行的情况,若换行了呢?
我其实是想实现如下功能:已经第一次显示了的字符窜,当我后来想用查找的方法找到某个
子字符窜,然后把找到的子字符窜变成其他颜色(就像用google,csdn中的搜索一样)。有什么好办法?

如果你找到了这个字符串先用背景色覆盖字符串所显示的范围,一般为矩形,所以你可以画个矩形(也可以用其他方法覆盖)来覆盖,这样原先的字符串消失,然后你再用你想要的颜色在范围内重新显示刚才被覆盖的字符串就可以了

#10


rockersz:如果你找到了这个字符串先用背景色覆盖字符串所显示的范围,一般为矩形,所以你可以画个矩形(也可以用其他方法覆盖)来覆盖,这样原先的字符串消失,然后你再用你想要的颜色在范围内重新显示刚才被覆盖的字符串就可以了


关键我想知道如何定位我搜索到的子字符串的位置(坐标位置)?
我已经用dc.DrawText(strSource,rc,DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS)的方法去画了
我的原字符串。

无论如何,非常感谢楼上诸位的参与,我一定会给分给各位的。
现在我的关键问题还是没有解决。

#11


如果使用DrawText函数的话,在rc这个矩形中画,具体怎么花就要看会面的参数(DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS)了。

当然你还可以使用TextOut()函数,具体可以看看msdn。很简单的

#12


拆分

#13


用TextOut()无法自动换行啊

#14


在list中你可以自己控制换行

#15


suisf2002:
我现在是在Dialog中

#16


up

#17


up