编程-windows程序设计中MM_ANISOTROPIC使用问题

问题描述

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

编程-windows程序设计中MM_ANISOTROPIC使用问题的相关文章

编程语言-windows程序设计中MM_ISOTROPIC怎么使用

问题描述 windows程序设计中MM_ISOTROPIC怎么使用 #include #define NUMLINES ((int) (sizeof devcaps / sizeof devcaps [0])) struct { int iIndex ; TCHAR * szLabel ; TCHAR * szDesc ; } devcaps [] = { HORZSIZE, TEXT ("HORZSIZE"), TEXT ("Width in millimeters:&qu

编程-windows程序设计WM_ANISOTROPIC使用问题

问题描述 windows程序设计WM_ANISOTROPIC使用问题 #include #define NUMLINES ((int) (sizeof devcaps / sizeof devcaps [0])) struct { int iIndex ; TCHAR * szLabel ; TCHAR * szDesc ; } devcaps [] = { HORZSIZE, TEXT ("HORZSIZE"), TEXT ("Width in millimeters:&q

windows程序设计texmetric函数问题

问题描述 windows程序设计texmetric函数问题 请问windows程序设计中如何修改textmetric函数中前七个参数的值,请知道的告诉下,谢谢了 解决方案 http://blog.sina.com.cn/s/blog_5fe0fbe80101f9sn.html 解决方案二: http://m.baidu.com/from=1000953b/bd_page_type=1/ssid=0/uid=0/pu=usm%400%2Csz%401320_1002%2Cta%40iphone_2

Windows程序设计 -鼠标

 GetSystemMetrics(SM_CYCAPTION)    //可以获得 标题栏的 高度    GetSystemMetrics(SM_CMOUSEBUTTONS)    //获得鼠标上安装的按键的个数 如果没安装那么返回 0 int fMouse = GetSystemMetrics (SM_MOUSEPRESENT) ;  //此函数 来确定 滑鼠是否存在  存在返回非0也就是TRUE  不存在返回0 也就是FALSE   下面是一些描述滑鼠按键动作的术语: Clicking 按下

在Windows Phone中使用HTML编程

原文:在Windows Phone中使用HTML编程 在开发Windows Phone的项目中,需求中有几个页面是要用表格来布局的(效果图如下),由于Grid中有的边线是虚的,而且没有边线,果断放弃了,用了border将表格的线加上去了.于是在有表格布局的页面,感觉很耗新能.在512M内存的手机上测试也不影响什么,于是就上传到商店了.现在想起来,WP8不是可以用HTML5编程么?于是就写了个DEMO来测试HTML的使用方法. 跟WinForm一样,WP也有WebBrowser这个浏览器的框,所以

windows系统中基于WIFI的网络编程

问题描述 windows系统中基于WIFI的网络编程 想用C++写一个在windows系统中基于WIFI传输数据的网络小程序,请各位高手指点一下,应该从哪方面入手,开发流程是什么样的? 解决方案 什么也不用操心,wifi对于你的程序来说,是透明的,换一句话说,无线有线你的代码无需变化.在windows下,可以使用winsock编程实现通讯,如果是vc++,用mfc,可以用csocket类,具体google下,有现成的代码例子. 解决方案二: 就是winsock2而已不管网络是什么,用这个就对了,

Visual C++程序设计中Windows GDI贴图闪烁的解决方法_C 语言

本文实例讲述了Visual C++程序设计中Windows GDI贴图闪烁的解决方法.分享给大家供大家参考.具体如下: 一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁. 先来谈谈闪烁产生的原因 原因一: 如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕 上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期. 一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的. 这样

windows程序设计(第五版)第22章的drum.c中的问题?

问题描述 windows程序设计(第五版)第22章的drum.c中的问题? windows程序设计(第五版)第22章的drum.c中的这段,没弄明白作者的想法, " if (x >= 0 && x < 32 && y >= 0 && y < NUM_PERC) { if (message == WM_LBUTTONDOWN) drum.dwSeqPerc[y] ^= (1 << x) ;//这里不明白,作者为什么

c语言-《Windows程序设计》书中有句——“字符串「Hello!」中的6个字符占用16位 ”怎么理解?

问题描述 <Windows程序设计>书中有句--"字符串「Hello!」中的6个字符占用16位 "怎么理解? <Windows程序设计>一书中有句话: "字符串「Hello!」中的6个字符占用16位:" 0x0048 0x0065 0x006C 0x006C 0x006F 0x0021 为什么是16位呢? 哪位大牛能够解释? 解决方案 一共8个拉丁字母或半角符号,每个占两位 解决方案二: 16位,16位是两个字节,最多放两个字符,你没看错吧