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

tank2009

New Member
08.05.2013
1
0
#1
Здравствуйте!!!
Извините за беспокойства но вы последняя для меня надежда!!!
Изучаю сам, с нуля
Никак не могу разобраться с заданием!!!

Перемещение (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;


Если можно подскажите что нибуть!!!
 
15.05.2013
6
0
#2
Я вижу это решение как то так



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;
}