我有一个Direct2D应用程序,可以用DirectWrite绘制文本消息。这都是C++。我想添加一个编辑控件,它必须支持表情符号和右侧的按钮。Win32编辑控件和按钮可以在Direct2D窗口中使用吗?文本按钮是用DirectWrite还是用旧的GDI呈现的?
谢谢
comctl32.dll中没有基于GDI的通用控件使用DirectWrite绘制文本(兼容性问题太多(,但Windows 10 shell的许多较新部分使用DirectWrite-任何基于DUI或XAML的控件,如"开始"菜单或系统设置应用程序。
- 根据Simon Mourier的评论,我几年前写了一个名为PadWrite的SDK示例,演示了一个非常基本的编辑控件,但我不推荐它作为一个严肃的文本编辑器,因为它在每次编辑时都会重新创建IDWriteTextLayout对象。因此,最好只更新几行或几段文本,因为更聪明的编辑器会有选择地只更新文本中发生变化的部分。这适用于Windows7,但Windows7本身只有基本的表情符号支持(Segoe UI符号中的单色符号(。直到Windows 10(使用Segoe UI表情符号(,它才真正变得丰富多彩
- 更新的RichEdit也是一个可行的选项(我忘了是哪些标志启用了它(
- 我曾尝试将标准EDIT控件子类化以拦截WM_PAINT消息(以及EDIT_GetRect、GetDCEx、DefSubassProc(,但这很脆弱,因为HFONT并不总是与相应的IDWriteFontFace匹配相同的度量,这是由于字体回退以及GDI与DWrite之间的度量差异,这意味着您绘制的文本可能与基础EDIT控件使用的字形不匹配
- 如果您可以依赖>=,WinUI应该可以很好地工作Windows 10
- 还有Scintilla文本编辑器,它支持DirectWrite模式。https://www.scintilla.org/ScintillaDoc.html(设置SCI_SETTECHNOLOGY=SC_TECHNOLOGY_DIRECTWRITE(。这将适用于>=Windows 7(或带有SP2 Service Pack平台更新的Vista(