官方版本的Duilib比较阳春,缺少一些目前类HTML5的属性,比如输入框默认字符等,本文章就意在记录自定制方法。关于Duilib介绍以及环境配置方法,请看我另一篇文章https://kefong.blog.csdn.net/article/details/120124811。
一、准备
在DuiLib官方源码处,新建一个测试项目,用于立刻验证和调试,引用DuiLib。具体看我另一篇文章https://kefong.blog.csdn.net/article/details/120124811
二、修改Control/UIEdit.cpp
找到方法void CEditUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue),在本方法最后一个esle if前,增加自定义属性tipvalue
else if( _tcsicmp(pstrName, _T("tipvalue")) == 0 ) SetTipValue(pstrValue);
测试方法SetTipValue是不存在的,所以会报错,接着同样是在本文件中实现此方法,
UIEdit.h
...
public:
...
void SetTipValue(LPCTSTR pStrTipValue);
...
protected:
...
CDuiString m_sTipValue;
...
UIEdit.cpp
...
void CEditUI::SetTipValue( LPCTSTR pStrTipValue )
{
m_sTipValue = pStrTipValue;
}
...
此时,在模板文件的Edit内增加相应属性tipvalue=“123456”,并调试程序,可以看出duilib已经获取到对应的值了,成功了一半了!
接着把这个值显示在空值得输入框里(如果有值就不显示),找到方法:void CEditUI::PaintText(HDC hDC),看到有个判断.IsEmpty,原来如果值为空的话,直接就return了,我们要对其进行改造下,显示我们自定义的内容
根据原代码可以看出,sText就是输入框界面上显示的值,那我们将此变量放在安排是否为空之前,如果为空时将默认提示文字赋给他,如果值不为空时,继续保持执行原来的代码。
OK,看效果