问题描述
- windows程序设计中MM_ANISOTROPIC使用问题
-
SetWindowExtEx, 用于设置逻辑坐标范围。
SetViewPortExtEx, 用于设置设备坐标范围。
那么,如果存在以下代码:
SetMapMode(hdc,MM_ANISOTROPIC);
SetWindowExtEx(hdc,200,200,NULL);//将窗口的逻辑坐标X轴0 到200,Y轴设置为0 到200
//将视口原点设置为客户区的中心点上
SetViewportOrgEx(hdc,rectClient.right / 2,rectClient.bottom / 2,NULL);
//将窗口的设备坐标X轴 0 到 rectClient.right,Y轴0 到 rectClient.bottom
SetViewportExtEx(hdc,rectClient.right,rectClient.bottom,NULL);Ellipse(hdc,-100,-100,100,100); MoveToEx(hdc,-200,0,NULL); LineTo(hdc,200,0); MoveToEx(hdc,0,-200,NULL); LineTo(hdc,0,200); MoveToEx(hdc,0,0,NULL); LineTo(hdc,100,100); 效果图为![图片说明](http://img.ask.csdn.net/upload/201504/07/1428420115_269700.jpg) 假设我现在再加一段代码: case WM_KEYDOWN: switch(wParam) { case VK_LEFT: SetWindowExtEx(hdc,400,400,NULL); UpdateWindow(hwnd); break; } return 0; 也就是将窗口的逻辑坐标X轴0 到400,Y轴设置为0 到400,然后重绘,按理说重绘后的圆应该比之前的小一倍,但实际上完全没有变化,请问为什么,是哪里错了。
我只是想用MM_ANISOTROPIC这种映射模式来实现输出图形放大缩小的效果,类似CAD画图滚动中键那样,应该不停执行 SetWindowExtEx(hdc,变量,变量,NULL);能实现的吧?请知道的告诉下,谢谢了
解决方案
同样的问题昨天有人问了。其实没有必要。
你只要增加个比例的变量。程序中绘图的代码都乘以它就可以了。
时间: 2024-10-03 05:14:18