窗口抖动效果
原理:
左右移动窗口,设定定时器,并设定窗口左右移动的最大范围。
也可以根据此思想设定窗口上下移动,东北-西南,东南-西北,等特殊方向移动。
实现:
原理:
左右移动窗口,设定定时器,并设定窗口左右移动的最大范围。
也可以根据此思想设定窗口上下移动,东北-西南,东南-西北,等特殊方向移动。
实现:
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);
}