gpt4 book ai didi

windows - Win32 : How to custom draw an Edit control?

转载 作者:可可西里 更新时间:2023-11-01 12:37:03 25 4
gpt4 key购买 nike

我需要实现 EM_SETCUEBANNER 的功能,其中文本提示出现在编辑控件内:

Example of cue banner in edit control

问题是我不能使用公共(public)控件的第 6 版,这是获得 Microsoft 提供的提示横幅实现所必需的。

我研究过简单地将编辑控件的文本和字体格式更改为

Dark Gray Italic Text

但它会引发我无法找到避免方法的Change 事件(component wrapper provided by higher component library)。

所以我改为自定义绘制文本,当控件未聚焦且为空时绘制提示横幅文本,否则依赖默认绘制。

Edit 控件没有很好地公开自定义绘图机制,like ListView, TreeView and others provide .

Other people have looked into it ,但这似乎是一项几乎不可能完成的任务:

From the way things are looking, I'll have to handle the following messages:

  • WM_ERASEBKGND, WM_PAINT (for obvious reasons)
  • WM_SETFOCUS, WM_KILLFOCUS (to prevent the white bar from displaying -- described above)
  • WM_CHAR (to process and update the text in the control)

And I also need to find a way to display the caret in the control, since I haven't found a way to allow Windows to do that for me without also painting the white bar I mentioned.

This is going to be fun. :rolleyes:

鉴于 Windows Edit 控件从来都不是要自定义绘制的:有谁知道如何自定义绘制 Windows Edit 控件?


注意:我也会接受解决我问题的答案,而不是回答我的问题。但是任何其他想要自定义绘制编辑控件的人遇到这个问题时,可能会想要一个答案。

最佳答案

自定义绘制编辑控件基本上是不可能的。有一些特殊情况,你做得很少,可以逃脱它,但你可能会在下一个版本的 Windows 中严重崩溃(或者当有人在旧版本上运行你的应用程序时,或通过终端服务等)。

仅仅接管 WM_PAINT 和 WM_ERASEBKGROUND 是不够的,因为控件有时也会在其他消息上绘制。

您最好只编写自己的编辑控件。我知道这是一项巨大的工作量,但从长远来看,这比尝试通过破解来接管所有编辑控件的绘图代码要少。

我记得过去的美好时光,当时每个人都使用子类化按钮控件来添加颜色和图形等。事情是,有一天我坐下来写了我自己的按钮窗口类。它比我们在源代码树中拥有的子类化和自定义绘制 Windows 按钮的代码更少。

关于windows - Win32 : How to custom draw an Edit control?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1955538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com