关于坐标映射方式 帮忙看下啊?

来源:百度知道 编辑:UC知道 时间:2024/05/13 17:07:21
http://baike.baidu.com/view/555551.htm
这个是程序
执行这一段的时候
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
SetMapMode(hdc,MM_ANISOTROPIC);
SetWindowExtEx(hdc,1,1,NULL);
SetViewportExtEx(hdc,cxChar,cyChar,NULL);

TextOut(hdc,1,1,szHeading,lstrlen(szHeading));
TextOut(hdc,1,2,szUnderLine,lstrlen(szUnderLine));

Show (hwnd, hdc, 1, 3, MM_TEXT, TEXT ("TEXT (pixels)"));
Show (hwnd, hdc, 1, 4, MM_LOMETRIC, TEXT ("LOMETRIC (.1 mm)"));
Show (hwnd, hdc, 1, 5, MM_HIMETRIC, TEXT ("HIMETRIC (.01 mm)"));
Show (hwnd, hdc, 1, 6, MM_LOENGLISH, TEXT ("LOENGLISH (.01 in)"));
Show (hwnd, hdc, 1, 7, MM_HIENGLISH, TEXT ("HIENGLISH (.001 in)"));
Show (hwnd, hdc, 1, 8, MM_TWIPS,

默认的坐标系是左上角(0,0)
除MM_ANISOTROPIC外,这几个映射方式的x轴正方向都是相同的,从左到右,
只有MM_TEXT的y轴的正方向是从上到下y为正值,其余从下到上,所以y为负值.
MM_ANISOTROPIC是程序员自己设定,本例设(1,1)为原点,(cxChar,cyChar)为相应的最远的点决定x,y是否为正,cxChar,cyChar都为正值,所以x,y都为正
调用show前使用的是MM_ANISOTROPIC,传递进去的y是在这种模式下的值,在内部会根据相应的模式变换.
所以不管传递进去的是什么,都会按照在MM_ANISOTROPIC模式下设定的位置输出.

是,该函数恢复设备上下文环境(DC)到指定状态,该设备上下文环境的恢复是通过使状态信息出栈而进行的。该堆栈由先前调用SaveDC函数时创建的。

留个记号