LRESULT CImgAreaWindow::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { int imgXRes = imageModel.GetWidth(); int imgYRes = imageModel.GetHeight(); sizeboxLeftTop.MoveWindow( 0, 0, 3, 3, TRUE); sizeboxCenterTop.MoveWindow( imgXRes * toolsModel.GetZoom() / 2000 + 3 * 3 / 4, 0, 3, 3, TRUE); sizeboxRightTop.MoveWindow( imgXRes * toolsModel.GetZoom() / 1000 + 3, 0, 3, 3, TRUE); sizeboxLeftCenter.MoveWindow( 0, imgYRes * toolsModel.GetZoom() / 2000 + 3 * 3 / 4, 3, 3, TRUE); sizeboxRightCenter.MoveWindow( imgXRes * toolsModel.GetZoom() / 1000 + 3, imgYRes * toolsModel.GetZoom() / 2000 + 3 * 3 / 4, 3, 3, TRUE); sizeboxLeftBottom.MoveWindow( 0, imgYRes * toolsModel.GetZoom() / 1000 + 3, 3, 3, TRUE); sizeboxCenterBottom.MoveWindow( imgXRes * toolsModel.GetZoom() / 2000 + 3 * 3 / 4, imgYRes * toolsModel.GetZoom() / 1000 + 3, 3, 3, TRUE); sizeboxRightBottom.MoveWindow( imgXRes * toolsModel.GetZoom() / 1000 + 3, imgYRes * toolsModel.GetZoom() / 1000 + 3, 3, 3, TRUE); UpdateScrollbox(); return 0; }
LRESULT CALLBACK ScrollboxWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_SIZE: if (hwnd == hScrollbox) { UpdateScrollbox(); } break; case WM_HSCROLL: if (hwnd == hScrollbox) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_ALL; GetScrollInfo(hScrollbox, SB_HORZ, &si); switch (LOWORD(wParam)) { case SB_THUMBTRACK: case SB_THUMBPOSITION: si.nPos = HIWORD(wParam); break; case SB_LINELEFT: si.nPos -= 5; break; case SB_LINERIGHT: si.nPos += 5; break; case SB_PAGELEFT: si.nPos -= si.nPage; break; case SB_PAGERIGHT: si.nPos += si.nPage; break; } SetScrollInfo(hScrollbox, SB_HORZ, &si, TRUE); MoveWindow(hScrlClient, -GetScrollPos(hScrollbox, SB_HORZ), -GetScrollPos(hScrollbox, SB_VERT), imgXRes * zoom / 1000 + 6, imgYRes * zoom / 1000 + 6, TRUE); } break; case WM_VSCROLL: if (hwnd == hScrollbox) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_ALL; GetScrollInfo(hScrollbox, SB_VERT, &si); switch (LOWORD(wParam)) { case SB_THUMBTRACK: case SB_THUMBPOSITION: si.nPos = HIWORD(wParam); break; case SB_LINEUP: si.nPos -= 5; break; case SB_LINEDOWN: si.nPos += 5; break; case SB_PAGEUP: si.nPos -= si.nPage; break; case SB_PAGEDOWN: si.nPos += si.nPage; break; } SetScrollInfo(hScrollbox, SB_VERT, &si, TRUE); MoveWindow(hScrlClient, -GetScrollPos(hScrollbox, SB_HORZ), -GetScrollPos(hScrollbox, SB_VERT), imgXRes * zoom / 1000 + 6, imgYRes * zoom / 1000 + 6, TRUE); } break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }