当前位置: 首页 > 工具软件 > SoUI > 使用案例 >

SOUI总结之运动基础

袁旻
2023-12-01

运动基础

窗口淡入淡出

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);

      }

   }

}

 类似资料: