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_GETOLEINTERFACEIRichEditOle::InsertObject(),后者需要您设置IOleObjectIStorageIOleClientSite 对象来管理您插入的每个位图。 Owner-drawing 的开销较小,但根据您正在绘制的控件类型,实现起来可能仍然不是一件容易的事。

以上是关于win32api:在文本行中合并位图的主要内容,如果未能解决你的问题,请参考以下文章

Win32 API 获取机器 UUID

位图未在 Win32 C++ 中绘制

发送/捕获 SIGTERM 的 Win32 API 模拟

如何在 win32 API 中向 Skins 添加控件

在 Win32 中显示带 alpha 通道的 32 位图像

Win32 - 如何获取给定系统光标位图的偏移量?