求一个震动对话框的函数,就想MSN/QQ那种。。。。 求一个震动对话框的函数,就像MSN/QQ那种。this窗口...自写了一个用MoveWindow的,四个角只是收缩了一下,像伸懒腰,就没了。。囧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MoveWindow就可以显然要注意延时以及Move的坐标,只是震动的话,窗口宽高是不变的 MoveWindow的宽和高不要改变,例如原左上点坐标为X,Y,使用不阻塞消息的定时器(不要SLEEP)将循环MoveWindow至(X+10,Y+10)、(X-10,Y+10)、(X+10,Y-10)、(X-10,Y-10),移动的大小也可以按照窗口原大小以一定比例换算。 // 窗口振动函数void CXXX::ShakeWindow(){ CRect rcWnd ; GetWindowRect(rcWnd) ; m_ptPosBeforeShake = rcWnd.TopLeft() ; // 记录窗口振动之前的位置 SetTimer(1, 40, NULL) ; // 启动窗口振动定时器}#define OFFSET 3void CXXX::OnTimer(UINT nIDEvent) { static int s_nIndex = 0 ; static int s_anOffset[][2] = { {OFFSET, - OFFSET}, {0, - OFFSET - OFFSET}, {- OFFSET, - OFFSET}, {0, 0}, {OFFSET, - OFFSET}, {0, - OFFSET - OFFSET}, {- OFFSET, - OFFSET}, {0, 0}, {OFFSET, - OFFSET}, {0, - OFFSET - OFFSET}, {- OFFSET, - OFFSET}, {0, 0}, {OFFSET, - OFFSET}, {0, - OFFSET - OFFSET}, {- OFFSET, - OFFSET}, {0, 0}, } ; // 振动轨迹为4次菱形循环 if (nIDEvent == 1) { SetWindowPos( NULL, m_ptPosBeforeShake.x + s_anOffset[s_nIndex][0], m_ptPosBeforeShake.y + s_anOffset[s_nIndex][1], 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE ) ; ++ s_nIndex ; if (s_nIndex == 16) { s_nIndex = 0 ; KillTimer(1) ; } } CWnd::OnTimer(nIDEvent);} 定时的变化 窗体的坐标, 就是MoveWindow或者或者SetWindowPos的应用 文君童鞋,蛋疼了?切了吧。哪有那么多妞介绍给你认识啊。别瞎留言,影响我光辉的形象啊。 几个MFC简单问题 vs2008制作的ocx注册后没有VersionIndependentProgID,js如何调用? 服务器转发 多穴主机(multihomed host)上如何对应用程序指定使用连接 不同打印机打出的效果不一样——散分 3000分学习windows系列(1) 谁会网络包过滤和发送技术啊,在线等待啊~~~~急~~~~ 学习MFC有用么? 我怎么样能够得到WSAsend()发送信息时所用时间 什么鸟《Windows核心编程》 示波器问题
显然要注意延时以及Move的坐标,只是震动的话,窗口宽高是不变的
// 窗口振动函数
void CXXX::ShakeWindow()
{
CRect rcWnd ;
GetWindowRect(rcWnd) ;
m_ptPosBeforeShake = rcWnd.TopLeft() ; // 记录窗口振动之前的位置
SetTimer(1, 40, NULL) ; // 启动窗口振动定时器
}#define OFFSET 3
void CXXX::OnTimer(UINT nIDEvent)
{
static int s_nIndex = 0 ;
static int s_anOffset[][2] = {
{OFFSET, - OFFSET}, {0, - OFFSET - OFFSET}, {- OFFSET, - OFFSET}, {0, 0},
{OFFSET, - OFFSET}, {0, - OFFSET - OFFSET}, {- OFFSET, - OFFSET}, {0, 0},
{OFFSET, - OFFSET}, {0, - OFFSET - OFFSET}, {- OFFSET, - OFFSET}, {0, 0},
{OFFSET, - OFFSET}, {0, - OFFSET - OFFSET}, {- OFFSET, - OFFSET}, {0, 0},
} ; // 振动轨迹为4次菱形循环
if (nIDEvent == 1)
{
SetWindowPos(
NULL,
m_ptPosBeforeShake.x + s_anOffset[s_nIndex][0], m_ptPosBeforeShake.y + s_anOffset[s_nIndex][1],
0, 0,
SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE
) ;
++ s_nIndex ;
if (s_nIndex == 16)
{
s_nIndex = 0 ;
KillTimer(1) ;
}
}
CWnd::OnTimer(nIDEvent);
}