win32api:在文本行中合并位图
Posted
技术标签:
【中文标题】win32api:在文本行中合并位图【英文标题】:win32api: incorporate bitmaps in text lines 【发布时间】:2014-08-22 06:45:47 【问题描述】:我正在尝试构建一个聊天应用程序,并且我正在使用带有 Win32 API 的 C++ 用于图形和网络。
我希望能够添加图标(如表情符号、玫瑰等)作为文本行的组成部分(“编辑”和“静态”窗口类型)。
有一种天真的(并且非常笨拙的解决方案)在窗口顶部显示位图应该出现的位置,在 2 个单词之间留出一个空格,并在文本上下滚动时移动它。这几乎是不切实际的解决方案。
我的问题是 - 是否有任何好的选项/想法如何将小图片(位图)作为图标、表情符号等合并到静态/编辑窗口类型中,更具体地说 - 在一行内?
谢谢!
【问题讨论】:
【参考方案1】:主要有两种解决方案:
-
使用 RTF 嵌入式图形对象(请参阅 that question)。我个人尽量避免使用 RTF 的东西,因为它非常复杂。 “只画一些格式化的文本”是可行的,而且不太复杂。 (请参阅 MSDN 中的 RichEdit 控件)。但是,我从未使用过嵌入式对象。所以我不知道它有多复杂......
自己绘制窗口内容(例如包含的文本)。然后,您还可以完全控制位图和图标的放置。但是,如果您需要编辑功能(例如,在编写文本时也应显示位图/图标),这可能太复杂了。
【讨论】:
RichEdit 控件支持嵌入图像,但是使用代码将位图放入 RichEdit 控件中非常复杂。您必须使用EM_GETOLEINTERFACE
和IRichEditOle::InsertObject()
,后者需要您设置IOleObject
、IStorage
和IOleClientSite
对象来管理您插入的每个位图。 Owner-drawing 的开销较小,但根据您正在绘制的控件类型,实现起来可能仍然不是一件容易的事。以上是关于win32api:在文本行中合并位图的主要内容,如果未能解决你的问题,请参考以下文章