窗口抖动效果
原理:
左右移动窗口,设定定时器,并设定窗口左右移动的最大范围。
也可以根据此思想设定窗口上下移动,东北-西南,东南-西北,等特殊方向移动。
实现:
原理:
左右移动窗口,设定定时器,并设定窗口左右移动的最大范围。
也可以根据此思想设定窗口上下移动,东北-西南,东南-西北,等特殊方向移动。
实现:
- int m_nLeftMin;
- int m_nRightMax;
- CRect m_rcWnd;
- BOOL m_bLeft;
- int m_nJitterTime;
- #define ID_JITTER 100
- void CTestCtrlsDlg::OnBnClickedButton1()
- {
- GetWindowRect(m_rcWnd);
- m_nLeftMin = m_rcWnd.left - 10;
- m_nRightMax = m_rcWnd.right + 10;
- m_nJitterTime = 250;// 单位: ms
- SetTimer(ID_JITTER, 15, 0);
- }
- void CTestCtrlsDlg::OnTimer(UINT_PTR nIDEvent)
- {
- // TODO: Add your message handler code here and/or call default
- if (ID_JITTER == nIDEvent) {
- m_nJitterTime -= 10;
- if (m_nJitterTime <= 0) {
- KillTimer(ID_JITTER);
- }
- CRect rcWnd;
- GetWindowRect(rcWnd);
- CRect rcNew=rcWnd;
- if (m_bLeft) {
- int nIdeaLeft = rcWnd.left - 10;
- if (nIdeaLeft <= m_nLeftMin) {
- m_bLeft = FALSE;
- rcNew.left = m_nLeftMin;
- } else {
- rcNew.left = nIdeaLeft;
- }
- rcNew.right = rcNew.left + rcWnd.Width();
- } else {
- int nIdeaRight = rcWnd.right + 10;
- if (nIdeaRight >= m_nRightMax) {
- m_bLeft = TRUE;
- rcNew.right = m_nRightMax;
- } else {
- rcNew.right = nIdeaRight;
- }
- rcNew.left = rcNew.right - rcWnd.Width();
- }
- MoveWindow(rcNew);
- }
- CDialog::OnTimer(nIDEvent);
- }