窗口映像模式 一直对这个问题搞不懂啊,逻辑坐标和设备坐标分别是什么?窗口和视口有什么区别?怎么书上说不管对窗口和视端口原点作什么改变,设备点(0,0)始终是显示区域的左上角?设备点和显示区域又是什么关系?窗口坐标原点和视口坐标原点都是指的哪个地方? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 他们的原点不一样,逻辑坐标以某个矩形(一般为窗口区域)的左上角为原点,而设备坐标一般以屏幕或打印机的作图区域左上角为原点。 简单说,设备坐标是你的显示器能表示的坐标,大小与分辨率有关。 逻辑坐标就是一个虚拟的概念,没有边界,但是不肯能一下子在屏幕上表示,只能一屏一屏的来。 比如,在绘图的过程中,当你把一个屏的图形移动到屏幕左边之后,你当前所在的屏幕坐标就不是初始状态了,而计算机不知道,可以使用DPtoLp()把当前的屏幕坐标转换为逻辑坐标,否则当你再把第一屏的数据移动过来后,两屏的数据会重合的。 视口对应设备坐标,设备坐标系是坐标原点O(0,0)总是在左上角位置,水平向右X递增,垂直向下Y弟增; 窗口对应逻辑坐标你在网上搜一下,有好多是关于这方面的介绍 经过一上午的研究,目前的体会是:设备坐标就是你创建出来的窗口那个坐标,其原点始终在(0,0),即窗口左上角,逻辑坐标就是你GDI函数(绝大部分)中使用的坐标,它是一个虚拟的"窗口",仅仅为了让你画图方便使用了GDI函数后这里指定的逻辑坐标Windows在实际输出到窗口上时将其转换为设备坐标,这时映像模式派上用途了,设置"窗口"坐标原点(逻辑坐标)方法:1 CRect rect; GetClientRect (&rect); dc.SetMapMode (MM_LOENGLISH); dc.SetViewportOrg (rect.Width () / 2, rect.Height () / 2);2 CRect rect; GetClientRect (&rect); CPoint point (rect.Width () / 2, rect.Height () / 2); dc.SetMapMode (MM_LOENGLISH); dc.DPtoLP (&point); dc.SetWindowOrg (-point.x, -point.y);两种方法都是将"窗口"坐标(逻辑坐标)原点设置为客户区中央,但是需要注意的是在使用SetWindowOrg时坐标值必须是逻辑坐标,因此需要dc.DPtoLP (&point),而在使用SetViewportOrg时则不需,因为这个函数使用的坐标值是设备坐标值。总结:设置逻辑坐标原点用SetViewportOrg最好,其中指定的x,y即是最后逻辑坐标原点的值,在这个基础上使用GDI函数即是。 串口通信 多线程 如何获取使用了FlashWindow函数的窗口 WSAAsyncSelect 服务端可以接收,但不能发送,客户端可以发送,但不能收数 怎么把任务栏里的多个图标,打包到一个图标里,点这个图标出现一个图标列表. 如何从内存设备描述表中导出图片到磁盘上的位图文件(DIB) 知道进程id号,怎样关闭进程,用api函数 CSingleLock //csignlelock设置为全局变量 好像就失去意义了。。。。。 怎么办????? 用OpenGL截取客户区图像,并保存为bmp图片,为灰色,求解决 playsound的疑问 win8下的驱动安装程序有疑惑 access数据类型 请教高手
逻辑坐标就是一个虚拟的概念,没有边界,但是不肯能一下子在屏幕上表示,只能一屏一屏的来。
比如,在绘图的过程中,当你把一个屏的图形移动到屏幕左边之后,你当前所在的屏幕坐标就不是初始状态了,而计算机不知道,可以使用DPtoLp()把当前的屏幕坐标转换为逻辑坐标,否则当你再把第一屏的数据移动过来后,两屏的数据会重合的。
窗口对应逻辑坐标
你在网上搜一下,有好多是关于这方面的介绍
设备坐标就是你创建出来的窗口那个坐标,其原点始终在(0,0),即窗口左上角,
逻辑坐标就是你GDI函数(绝大部分)中使用的坐标,它是一个虚拟的"窗口",仅仅为了让你画图方便
使用了GDI函数后这里指定的逻辑坐标Windows在实际输出到窗口上时将其转换为设备坐标,这时映像模式派上用途了,
设置"窗口"坐标原点(逻辑坐标)方法:
1 CRect rect;
GetClientRect (&rect);
dc.SetMapMode (MM_LOENGLISH);
dc.SetViewportOrg (rect.Width () / 2, rect.Height () / 2);2 CRect rect;
GetClientRect (&rect);
CPoint point (rect.Width () / 2, rect.Height () / 2);
dc.SetMapMode (MM_LOENGLISH);
dc.DPtoLP (&point);
dc.SetWindowOrg (-point.x, -point.y);两种方法都是将"窗口"坐标(逻辑坐标)原点设置为客户区中央,但是需要注意的是在使用SetWindowOrg时坐标值必须是逻辑坐标,因此需要dc.DPtoLP (&point),而在使用SetViewportOrg时则不需,因为这个函数使用的坐标值是设备坐标值。总结:设置逻辑坐标原点用SetViewportOrg最好,其中指定的x,y即是最后逻辑坐标原点的值,在这个基础上使用GDI函数即是。