#include "MagneticWindowsCore.h" HANDLE hSnapToListService; int SnapToList(WPARAM wParam, LPARAM Align) { HWND hWnd, hWndList; RECT WndRect, ListRect; RECT AlignRect; RECT ResultRect; hWnd = (HWND)wParam; hWndList = (HWND)CallService(MS_CLUI_GETHWND,0,0); GetWindowRect(hWnd, &WndRect); GetWindowRect(hWndList, &ListRect); AlignRect = ListRect; if ((!(MS_MW_STL_List_Left & Align)) && (MS_MW_STL_List_Right & Align)) { AlignRect.left = AlignRect.right; } else if ((MS_MW_STL_List_Left & Align) && (!(MS_MW_STL_List_Right & Align))) { AlignRect.right = AlignRect.left; } if ((!(MS_MW_STL_List_Top & Align)) && (MS_MW_STL_List_Bottom & Align)) { AlignRect.top = AlignRect.bottom; } else if ((MS_MW_STL_List_Top & Align) && (!(MS_MW_STL_List_Bottom & Align))) { AlignRect.bottom = AlignRect.top; } ResultRect = WndRect; if ((MS_MW_STL_Wnd_Left & Align) && (MS_MW_STL_Wnd_Right & Align)) { ResultRect.left = AlignRect.left; ResultRect.right = AlignRect.right; } else if ((!(MS_MW_STL_Wnd_Left & Align)) && (MS_MW_STL_Wnd_Right & Align)) { ResultRect.left = AlignRect.right - (WndRect.right - WndRect.left); ResultRect.right = AlignRect.right; } else if ((MS_MW_STL_Wnd_Left & Align) && (!(MS_MW_STL_Wnd_Right & Align))) { ResultRect.left = AlignRect.left; ResultRect.right = AlignRect.left + (WndRect.right - WndRect.left); } if ((MS_MW_STL_Wnd_Top & Align) && (MS_MW_STL_Wnd_Bottom & Align)) { ResultRect.top = AlignRect.top; ResultRect.bottom = AlignRect.bottom; } else if ((!(MS_MW_STL_Wnd_Top & Align)) && (MS_MW_STL_Wnd_Bottom & Align)) { ResultRect.top = AlignRect.bottom - (WndRect.bottom - WndRect.top); ResultRect.bottom = AlignRect.bottom; } else if ((MS_MW_STL_Wnd_Top & Align) && (!(MS_MW_STL_Wnd_Bottom & Align))) { ResultRect.top = AlignRect.top; ResultRect.bottom = AlignRect.top + (WndRect.bottom - WndRect.top); } MoveWindow(hWnd, ResultRect.left, ResultRect.top, ResultRect.right-ResultRect.left, ResultRect.bottom-ResultRect.top, true); return 0; }