c++ 代码 使窗体震动,实现最前提醒

2014-11-24 12:17:27 · 作者: · 浏览: 1

#ifndef DEBUG_DISABLE
#define DEBUG_ENTERED(M) MessageBox(NULL,\
M,\
"Tip",\
MB_OK);
#else
#define DEBUG_ENTERED(M)
#endif

BOOL ShockWindow(HWND hWindow,DWORD dwDelayTime/*ms*/,DWORD dwShockTimes,DWORD dwSpan,BOOL bStayTop);

[cpp]
BOOL ShockWindow(HWND hWindow,DWORD dwDelayTime,DWORD dwShockTimes,DWORD dwSpan,BOOL bStayTop)
{
//get the information of the window
RECT rect;
GetWindowRect(hWindow,&rect);

//valid
if(!hWindow)
{
DEBUG_ENTERED("Can not find window!")
return FALSE;
}
else
{
ShowWindow(hWindow,SW_NORMAL);
DEBUG_ENTERED("ENTER PROCESSING")

//if window is minimize,without this statement ,will cause the window hide
GetWindowRect(hWindow,&rect);

//on top
SetWindowPos(hWindow,HWND_TOPMOST,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,SWP_NOSIZE|SWP_NOMOVE);

//start shock
for(int i=0;i {
MoveWindow(hWindow,rect.left+dwSpan,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE);
Sleep(dwDelayTime);
MoveWindow(hWindow,rect.left,rect.top-dwSpan,rect.right-rect.left,rect.bottom-rect.top,TRUE);
Sleep(dwDelayTime);
MoveWindow(hWindow,rect.left-dwSpan,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE);
Sleep(dwDelayTime);
MoveWindow(hWindow,rect.left,rect.top+dwSpan,rect.right-rect.left,rect.bottom-rect.top,TRUE);
Sleep(dwDelayTime);
}

//back to original position www.2cto.com
MoveWindow(hWindow,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE);

//weather the window want to be on top PS:now it is on top
if(!bStayTop)
{
SetWindowPos(hWindow,HWND_NOTOPMOST,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,SWP_NOSIZE|SWP_NOMOVE);
}

DEBUG_ENTERED("ENTER ENDING")
return TRUE;
}
}


摘自 sryan的专栏