Duilib支持自绘tooltip

由于Duilib的tooltip使用的是系统默认的实现,这里希望他能像普通窗口一样使用xml定制界面,所以决定尝试修改Duilib源码实现这个效果,最终还是做出一个版本。效果图:


1.为CControlUI增加下面4个函数:

virtual void SetUserToolTipXml(LPCTSTR pstrXml);
virtual CDuiString GetUserToolTipXml() const;
virtual void SetToolTipCallBack(IToolTipCallBack* pCallBack);
virtual IToolTipCallBack* GetToolTipCallback() const;

void CControlUI::SetUserToolTipXml(LPCTSTR pstrXml)
{
    m_sToolTipXml = pstrXml;
}

CDuiString CControlUI::GetUserToolTipXml() const
{
    return m_sToolTipXml;
}

void CControlUI::SetToolTipCallBack(IToolTipCallBack* pCallBack)
{
    m_pCallBack = pCallBack;
}

IToolTipCallBack* CControlUI::GetToolTipCallback() const
{
    return m_pCallBack;
}


CControlUI::SetAttribute:

else if( _tcscmp(pstrName, _T("usertooltip")) == 0 ) SetUserToolTipXml(pstrValue);

可以对每个控件单独定制tooltip界面,并且使用IToolTipCallBack回调接口实现界面上的文本

2.自绘tooltip类

CustomToolTipWnd.h

#pragma once


namespace DuiLib {

	class IToolTipCallBack {
	public:
		virtual LPCTSTR GetToolTip(CControlUI* pTipOwner, LPCTSTR pstrTipCtrl) = 0;
	};


	class CCustomToolTipWnd : public CWindowWnd
	{
	public:
		CCustomToolTipWnd(CControlUI* pOwner);
		~CCustomToolTipWnd(void);

		void Init(LPCTSTR pstrXml, IToolTipCallBack* callback);
	protected:
		LPCTSTR GetWindowClassName() const;
		UINT GetClassStyle() const;		

		void OnFinalMessage(HWND hWnd);
		LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);

		void Walk(CControlUI* pCtrl);

	private:
		CPaintManagerUI m_pm;
		CDuiString m_sXml;
		IToolTipCallBack* m_pCallBack;
		CControlUI* m_pOwner;
	};

}// namespace Duilib

CustomToolTipWnd.cpp


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值