1.在函数中将窗口透明度设置为最高,设置定时器,到达指定时间后再打开另一个定时器,在定时器里面实现淡入淡出。
LRESULT CMainDlg::OnNotice(UINT uMsg,WPARAM wp,LPARAM lp,BOOL & bHandled)
{
SStringT strNotice = *(SStringT*)wp;
CMainDlg* pDlg = ZNotice::GetInstance()->GetMainDlg();
if (pDlg)
{
pDlg->KillTimer(100);
pDlg->KillTimer(101);
SWindow* pWnd = pDlg->FindChildByName(L"wndNotice");
if (pWnd)
{
m_nAlpha = 255;
pWnd->SetAttribute(L"alpha",SStringT().Format(_T("%d"),m_nAlpha));
pWnd->SetVisible(TRUE,TRUE);
pWnd->SetWindowText(strNotice);
}
pDlg->SetTimer(100,3000);
}
return 0;
}
2.到达时间,首先关掉原来的定时器,在打开淡入淡出定时器,将透明度逐渐减小直至0,在将窗口隐藏掉。
void CMainDlg::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == 100)
{
::SetTimer(m_hWnd,101,10,NULL);
::KillTimer(m_hWnd,100);
}
if (nIDEvent == 101)
{
SWindow* pWnd = FindChildByName(L"wndNotice");
if (!pWnd)
{
return;
}
if (m_nAlpha > 0)
{
pWnd->SetAttribute(L"alpha",SStringT().Format(_T("%d"),m_nAlpha));
m_nAlpha -= 1;
}
else
{
pWnd->SetVisible(FALSE,TRUE);
::KillTimer(m_hWnd,101);
}
}
}