- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要实现 EM_SETCUEBANNER 的功能,其中文本提示出现在编辑控件内:
问题是我不能使用公共(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/
我是一名优秀的程序员,十分优秀!