Программа должна зумировать изображение в окне для зума использую колесико мыши.В MOUSEWHEEL изменяю переменую zoom,но в StretchBlt почему-то не отражается это
// Global Variables: HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
// Forward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here. MSG msg; HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_BITMAPPAINT)); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
return (int) msg.wParam; }
// // FUNCTION: MyRegisterClass() // // PURPOSE: Registers the window class. // // COMMENTS: // // This function and its usage are only necessary if you want this code // to be compatible with Win32 systems prior to the 'RegisterClassEx' // function that was added to Windows 95. It is important to call this function // so that the application will get 'well formed' small icons associated // with it. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex;
// // FUNCTION: InitInstance(HINSTANCE, int) // // PURPOSE: Saves instance handle and creates main window // // COMMENTS: // // In this function, we save the instance handle in a global variable and // create and display the main program window. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
return TRUE; }
// // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // //
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; RECT trect; HDC hdc=GetDC(hWnd); // дескриптор контекста устройства static POINTS ptsBegin; // начальная точка static POINTS ptsEnd; // новая конечная точка static BOOL fPrevLine = FALSE; // флаг предыдущей линии static int j=2; static RECT rcClient; // прямоугольник клиентской области static int k=0; static int mode,zoom=1; static HDC memDC = CreateCompatibleDC(hdc); static HBITMAP memBM = CreateCompatibleBitmap (hdc, GetDeviceCaps(hdc, HORZRES), GetDeviceCaps(hdc, VERTRES)); if(k==0) { SelectObject(memDC, memBM); PatBlt(memDC,0,0,GetDeviceCaps(hdc, HORZRES),GetDeviceCaps(hdc, VERTRES),WHITENESS); k++; } ReleaseDC(hWnd, hdc); switch (message) {
case WM_CREATE:
break; case WM_LBUTTONDOWN: // Захватываем мышку. //SetCapture(hWnd);
У тебя переменная zoom объявлена как int, следовательно изменяться она не будет вообще: при попытке изменить zoom с 1 на 1.1 произойдет округление опять до 1... Так что описывай zoom как double, а потом уже посмотрим...
Coach
24.09.2009 22:35
Цитата(volvo @ 24.09.2009 21:58)
У тебя переменная zoom объявлена как int, следовательно изменяться она не будет вообще: при попытке изменить zoom с 1 на 1.1 произойдет округление опять до 1... Так что описывай zoom как double, а потом уже посмотрим...
Спасибо действительно помогло ,но возник вопрос как получить всю область окна после зуммирования
volvo
25.09.2009 12:48
Всю область окна (так же, как и ПЕРЕД зуммированием) можно получить через GetClientRect, если "получить" значит "определить размеры". У тебя при зуме ничего (с точки зрения размеров окна) не происходит, так что область окна остается неизменной.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.