窗口抖动效果

窗口抖动效果 
原理:
左右移动窗口,设定定时器,并设定窗口左右移动的最大范围。
也可以根据此思想设定窗口上下移动,东北-西南,东南-西北,等特殊方向移动。


实现:
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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值