Перемещение И Масштабирование Рисунка В Окне!

Тема в разделе "MS Visual C++", создана пользователем tank2009, 8 май 2013.

  1. tank2009

    tank2009 New Member

    Регистрация:
    8 май 2013
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте!!!
    Извините за беспокойства но вы последняя для меня надежда!!!
    Изучаю сам, с нуля
    Никак не могу разобраться с заданием!!!

    Перемещение (Pan) и масштабирование (Zoom) рисунка с помощью колесика мыши (Pan - Wheel и Shift+Wheel, Zoom - Ctrl+Wheel и Ctrl+Shift+Wheel).
    Если с клавишами разобрался то Перемещение и масштабирование ну никак не получается!!!

    Вот код!!!

    case WM_MOUSEWHEEL:
    wmId = LOWORD(wParam);
    shag = HIWORD(wParam);
    hdc=GetDC(hWnd);
    hdcWin = GetDC(hWnd);
    hdcScaled = CreateCompatibleDC(hdc);//новое контекстное устройства

    bm = CreateCompatibleBitmap(hdc,xmax,ymax);
    SelectObject(hdcScaled, bm);



    switch (wmId){
    case 8:
    StretchBlt(hdcScaled,xn+5, yn+5, xk-5, yk-5,
    hdcvirt,0,0,xmax,ymax,
    SRCCOPY);


    BitBlt(hdcWin,0,0,xk,yk,
    hdcScaled,xn+5,yn+5,
    SRCCOPY);

    xk=xk-5;yk=yk-5;
    xn=xn+5;yn=yn+5;
    break;
    case 12:
    StretchBlt(hdcScaled,xn-5, yn-5, xk+5, yk+5,
    hdcvirt,0,0,xmax,ymax,
    SRCCOPY);


    BitBlt(hdcWin,0,0,xmax,ymax,
    hdcScaled,xn-5,yn-5,
    SRCCOPY);

    xk=xk+5;yk=yk+5;
    xn=xn-5;yn=yn-5;
    break;

    case 4:
    StretchBlt(hdcScaled,xn+5, yn, xk+5, yk,
    hdcvirt,xn,yn,xk, yk,
    SRCCOPY);


    BitBlt(hdcWin,0,0,xk+5,yk,
    hdcScaled,xn+5,yn,
    SRCCOPY);

    xk=xk+5;yk=yk;
    xn=xn+5;yn=yn;
    break;
    default:
    StretchBlt(hdcScaled,xn-5, yn, xk-5, yk,
    hdcvirt,xn,yn,xk, yk,
    SRCCOPY);


    BitBlt(hdcWin,0,0,xk-5,yk,
    hdcScaled,xn-5,yn,
    SRCCOPY);

    xk=xk-5;yk=yk;
    xn=xn-5;yn=yn; }


    DeleteDC(hdcScaled);
    DeleteDC(hdctank);
    ReleaseDC(hWnd, hdc);
    ReleaseDC(hWnd, hdcWin);
    break;


    Если можно подскажите что нибуть!!!
     
  2. ESWANT

    ESWANT Member

    Регистрация:
    15 май 2013
    Сообщения:
    6
    Симпатии:
    0
    Я вижу это решение как то так



    HDC hdc;
    HDC hdmc;
    BITMAP bm
    HBITMAP hBitmap;




    case WM_PAINT: //на перерисовку окна
    {
    hdc = BeginPaint(hDlg, &ps);


    hmdc=CreateCompatibleDC(hdc); //Создаём совместимый с оконным контекст в памяти
    SelectObject(hmdc, hBitmap); //Выбирает объект картинку (до этого Вы каким нибудь способом ее загрузили)

    GetObject(hBitmap, sizeof(bm), (LPSTR) &bm); //получаем высоту и ширину картинки

    StretchBlt(hdc,r.left,r.top,r.right-r.left,r.bottom-r.top,hmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    DeleteDC(hmdc); //удаляем из памяти контекст

    //а r это RECT координаты которого нужно менять, при любом удобном для вас событии
    //при прокручивании колесика или нажатии кнопки
    //тоесть картинка например реальным размером 250 на 250 будет вписываться в указанный Вами RECT
    //а рект будете менять, тоесть картинку можно не только умньшать но и перемещать по окну куда нужно
    //меняя координаты RECT-a





    EndPaint(hDlg, &ps);
    return TRUE;
    }
     
Загрузка...

Поделиться этой страницей