为DuiLib的Edit控件增加PlaceHolderText

效果:没有焦点时显示一个提示文本,获得焦点时则清空提示,开始输入

开始修改:
UIEdit.h:

private:
	DWORD m_dwPlaceholderTextColor=0xFF8B8B8B;
	CDuiString m_sPlaceholderText;
public:
	DuiLib::CDuiString GetPlaceholderText() const { return m_sPlaceholderText; }
	void SetPlaceholderText(const DuiLib::CDuiString& pstrText) { m_sPlaceholderText = pstrText; };
	DWORD GetPlaceholderTextColor() const { return m_dwPlaceholderTextColor; }
	void SetPlaceholderTextColor(DWORD val) { m_dwPlaceholderTextColor = val; }

UIEdit.cpp:

void CEditUI::PaintText(HDC hDC)
	{
		if( m_dwTextColor == 0 ) m_dwTextColor = m_pManager->GetDefaultFontColor();
		if( m_dwDisabledTextColor == 0 ) m_dwDisabledTextColor = m_pManager->GetDefaultDisabledColor();

		RECT rc = m_rcItem;
		rc.left += m_rcTextPadding.left;
		rc.right -= m_rcTextPadding.right;
		rc.top += m_rcTextPadding.top;
		rc.bottom -= m_rcTextPadding.bottom;

		if( m_sText.IsEmpty() ){
			if (!m_sPlaceholderText.IsEmpty()) {
				CRenderEngine::DrawText(hDC, m_pManager, rc, m_sPlaceholderText, m_dwPlaceholderTextColor, \
					m_iFont, DT_SINGLELINE | m_uTextStyle);
				return;
			}
		}

		CDuiString sText = m_sText;
		if( m_bPasswordMode ) {
			//LOGCON("pssmode");
			//LOG("passmode");
			sText.Empty();
			LPCTSTR p = m_sText.GetData();
			while( *p != _T('\0') ) {
				sText += m_cPasswordChar;
				p = ::CharNext(p);
			}
		}
		//LOG(sText.GetData());
		
		if( IsEnabled() ) {
			CRenderEngine::DrawText(hDC, m_pManager, rc, sText, m_dwTextColor, \
				m_iFont, DT_SINGLELINE | m_uTextStyle);
		}
		else {
			CRenderEngine::DrawText(hDC, m_pManager, rc, sText, m_dwDisabledTextColor, \
				m_iFont, DT_SINGLELINE | m_uTextStyle);

		}
	}

在SetAttribute中增加一行:

else if (_tcscmp(pstrName, _T("placeholdertext")) == 0) SetPlaceholderText(pstrValue);

这样可以在xml里直接设置placeholdertext属性:

<Edit name="edtTaskName"  width="240" height="30" bkcolor="#FFFFFFFF" textpadding="4,3,4,3" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" tooltip="选填,不填将使用任务类型中中的名称" placeholdertext="选填,不填将使用任务类型中中的名称" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值