#include "stdafx.h" void CShake::Load(void) { Shaking = false; ShakingChat = false; nScaleClist = db_get_dw(NULL, MODULENAME, "ScaleClist", 5); nScaleChat = db_get_dw(NULL, MODULENAME, "ScaleChat", 2); nMoveClist = db_get_dw(NULL, MODULENAME, "MoveClist", 15); nMoveChat = db_get_dw(NULL, MODULENAME, "MoveChat", 15); } void CShake::Save(void) { db_set_dw(NULL, MODULENAME, "ScaleClist", this->nScaleClist); db_set_dw(NULL, MODULENAME, "ScaleChat", this->nScaleChat); db_set_dw(NULL, MODULENAME, "MoveClist", this->nMoveClist); db_set_dw(NULL, MODULENAME, "MoveChat", this->nMoveChat); } void __cdecl ShakeChatWindow(void *Param) { HWND hWnd = (HWND)Param; shake.ShakeChat(hWnd); } void __cdecl ShakeClistWindow(void *Param) { HWND hWnd = (HWND)Param; shake.ShakeClist(hWnd); } INT_PTR ShakeClist(WPARAM, LPARAM) { mir_forkthread(ShakeClistWindow, (void*)pcli->hwndContactList); return 0; } INT_PTR ShakeChat(WPARAM wParam, LPARAM) { if (((HANDLE)wParam) == nullptr) return -1; MessageWindowData mwd; Srmm_GetWindowData(db_mc_tryMeta(wParam), mwd); HWND parent; HWND hWnd = mwd.hwndWindow; while ((parent = GetParent(hWnd)) != nullptr) hWnd = parent; // ensure we have the top level window (need parent window for scriver & tabsrmm) mir_forkthread(ShakeChatWindow, (void*)hWnd); return 0; } int CShake::ShakeChat(HWND hWnd) { if (!ShakingChat) { ShakingChat = true; RECT rect; GetWindowRect(hWnd, &rect); for (int i = 0; i < nMoveChat; i++) { SetWindowPos(hWnd, nullptr, rect.left - nScaleChat, rect.top, 0, 0, SWP_NOSIZE); Sleep(10); SetWindowPos(hWnd, nullptr, rect.left, rect.top - nScaleChat, 0, 0, SWP_NOSIZE); Sleep(10); SetWindowPos(hWnd, nullptr, rect.left + nScaleChat, rect.top, 0, 0, SWP_NOSIZE); Sleep(10); SetWindowPos(hWnd, nullptr, rect.left, rect.top + nScaleChat, 0, 0, SWP_NOSIZE); Sleep(10); } SetWindowPos(hWnd, nullptr, rect.left, rect.top, 0, 0, SWP_NOSIZE); //SWP_DRAWFRAME ShakingChat = false; } return 0; } int CShake::ShakeClist(HWND hWnd) { if (!Shaking) { Shaking = true; RECT rect; GetWindowRect(hWnd, &rect); for (int i = 0; i < nMoveClist; i++) { SetWindowPos(hWnd, nullptr, rect.left - nScaleClist, rect.top, 0, 0, SWP_NOSIZE); Sleep(10); SetWindowPos(hWnd, nullptr, rect.left, rect.top - nScaleClist, 0, 0, SWP_NOSIZE); Sleep(10); SetWindowPos(hWnd, nullptr, rect.left + nScaleClist, rect.top, 0, 0, SWP_NOSIZE); Sleep(10); SetWindowPos(hWnd, nullptr, rect.left, rect.top + nScaleClist, 0, 0, SWP_NOSIZE); Sleep(10); } SetWindowPos(hWnd, nullptr, rect.left, rect.top, 0, 0, SWP_NOSIZE); Shaking = false; } return 0; }