QQ上的Edit效果如图所示:
显示效果:
获取焦点后的效果:
单击后的效果:
Edit失去焦点后的效果:
通过分析XML文件发现,该效果是由一个Button和Edit两个空间组合形成的,其中两个空间的大小相等。原理:通过单击按钮,将按钮SetVisible(false),通过将EditSetVisible(ture),同时获取按钮中的内容,赋值给Edit,当Edit失去焦点后,将Edit进行SetVisible(false),按钮将SetVisible(ture),同时按钮获取到Edit中的内容。
源码(控件都是在Notify函数中实现):
单击Button时所运行的源码:
else if (_tcsicmp(msg.pSender->GetName(), “button控件的名称”) == 0)
{
msg.pSender->SetVisible(false);
CRichEditUI* signature = static_cast<CRichEditUI*>(m_PaintManager.FindControl(“Edit控件的名称”));
if (signature != NULL)
{
signature->SetText(msg.pSender->GetText());
signature->SetVisible(true);
}
}
Edit失去焦点后的源码:
else if (_tcsicmp(msg.sType, _T("killfocus")) == 0)
{
if (_tcsicmp(msg.pSender->GetName(), “Edit控件的名称”) == 0)
{
msg.pSender->SetVisible(false);
CControlUI* signature_tip = m_PaintManager.FindControl(“Button控件的名称”);
if (signature_tip != NULL)
{
CRichEditUI* signature = static_cast<CRichEditUI*>(msg.pSender);
if (signature != NULL)
signature_tip->SetText(signature->GetText());
signature_tip->SetVisible(true);
}
}
显示效果:
获取焦点后的效果:
单击后的效果:
Edit失去焦点后的效果:
通过分析XML文件发现,该效果是由一个Button和Edit两个空间组合形成的,其中两个空间的大小相等。原理:通过单击按钮,将按钮SetVisible(false),通过将EditSetVisible(ture),同时获取按钮中的内容,赋值给Edit,当Edit失去焦点后,将Edit进行SetVisible(false),按钮将SetVisible(ture),同时按钮获取到Edit中的内容。
源码(控件都是在Notify函数中实现):
单击Button时所运行的源码:
else if (_tcsicmp(msg.pSender->GetName(), “button控件的名称”) == 0)
{
msg.pSender->SetVisible(false);
CRichEditUI* signature = static_cast<CRichEditUI*>(m_PaintManager.FindControl(“Edit控件的名称”));
if (signature != NULL)
{
signature->SetText(msg.pSender->GetText());
signature->SetVisible(true);
}
}
Edit失去焦点后的源码:
else if (_tcsicmp(msg.sType, _T("killfocus")) == 0)
{
if (_tcsicmp(msg.pSender->GetName(), “Edit控件的名称”) == 0)
{
msg.pSender->SetVisible(false);
CControlUI* signature_tip = m_PaintManager.FindControl(“Button控件的名称”);
if (signature_tip != NULL)
{
CRichEditUI* signature = static_cast<CRichEditUI*>(msg.pSender);
if (signature != NULL)
signature_tip->SetText(signature->GetText());
signature_tip->SetVisible(true);
}
}