cyl531207502
cyl531207502
采纳率52.8%
2015-04-07 15:29 阅读 1.9k
已采纳

windows程序设计中MM_ANISOTROPIC使用问题

20

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);
            效果图为![图片说明](https://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);能实现的吧?请知道的告诉下,谢谢了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    devmiao devmiao 2015-04-07 15:31

    同样的问题昨天有人问了。其实没有必要。
    你只要增加个比例的变量。程序中绘图的代码都乘以它就可以了。

    点赞 3 评论 复制链接分享

相关推荐