If you have hDC handle of the canvas, can't you simply use StretchBlt so that both source and target hDC is the one of the canvas?
Something like:
1. Draw the picture on the canvas in 1:1.
2. Call StretchBlt on the canvas to zoom part of the canvas to cover all the canvas.
2b. If user zooms out more than 1:1 then draw some border on the rest of the canvas.
3. Draw the polygon.
Something like:
1. Draw the picture on the canvas in 1:1.
2. Call StretchBlt on the canvas to zoom part of the canvas to cover all the canvas.
2b. If user zooms out more than 1:1 then draw some border on the rest of the canvas.
3. Draw the polygon.