Программирование на C++ глазами хакера


Перемещение окна за любую область - часть 2


bool dragging=false;
POINT MousePnt;

Листинг 3.5. Код перетаскивания мышки
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; HDC hdcBits;

RECT wndrect; POINT point;

switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... hdcBits=::CreateCompatibleDC(hdc); SelectObject(hdcBits, maskBitmap); BitBlt(hdc, 0, 0, 200, 200, hdcBits, 0, 0, SRCCOPY); DeleteDC(hdcBits); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break;

/////////////////////////////////////////// // Начало кода, который надо добавить ///////////////////////////////////////////

// Следующий код обрабатывает событие, // когда нажата левая кнопка мыши case WM_LBUTTONDOWN: GetCursorPos(&MousePnt); dragging = true; SetCapture(hWnd); break; // Следующий код обрабатывает событие, // когда курсор мышки движется по экрану case WM_MOUSEMOVE: if (dragging) // Если нажата кнопка, то... { // Получить текущую позицию курсора GetCursorPos(&point); // Получить текущие размеры окна GetWindowRect(hWnd, &wndrect);

// Откорректировать положение окна wndrect.left = wndrect.left+(point.x - MousePnt.x); wndrect.top = wndrect.top +(point.y - MousePnt.y);

// Установить новые размеры окна SetWindowPos(hWnd, NULL, wndrect.left, wndrect.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE);

// Запоминаем текущую позицию курсора MousePnt=point; } break; // Следующий код обрабатывает событие, // когда левая кнопка мыши отпущена case WM_LBUTTONUP: if (dragging) { dragging=false; ReleaseCapture(); } /////////////////////////////////////////// // Конец кода, который надо добавить /////////////////////////////////////////// default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }




Начало  Назад  Вперед



Книжный магазин