#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);
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<dwShockTimes;++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 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; } }