GDI映射模式(mapping mode):
和映射模式紧密相关的还有4个其它的设备环境属性:
1.窗口原点(window origin)
2.视口原点(viewport origin)
3.窗口范围(window extents)
4.视口范围(viewport extents)
所有GDI函数中(如TextOut),参数坐标值都是“逻辑单位(logical unit)”, Windows必须将逻辑单位转换为“设备单位(device unit)”
Windows定义了8种映射模式。他们在WINGDI.H中定义的标识符如下表示.

映射模式被定义为从“窗口”(window)(逻辑坐标)到“视口”(viewport)(设备坐标)的映射。

测试代码:

//
// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClient,cyClient;
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc; switch (message)
{
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
return 0;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here... /*
//SetMapMode(hdc,MM_ISOTROPIC);
SetMapMode(hdc,MM_ANISOTROPIC); //会拉伸
SetWindowExtEx(hdc, 32767,32767,NULL);
SetViewportExtEx(hdc,cxClient,-cyClient,NULL);
SetViewportOrgEx(hdc,0,cyClient,NULL);
//MoveToEx(hdc,0,0,NULL);
LineTo(hdc,32767,32767);
*/ SetMapMode(hdc,MM_ISOTROPIC);
SetWindowExtEx(hdc,1000,1000,NULL);
SetViewportExtEx(hdc,cxClient/2,-cyClient/2,NULL);
//(xWinOrg,yWinOrg),(xViewOrg,yViewOrg) 均默认为(0,0)
//SetWindowOrgEx(hdc,cxClient/2,cyClient/2,NULL);
SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL); Rectangle(hdc,-200,-200,200,200);
MoveToEx(hdc,-200,-200,NULL);
LineTo(hdc,200,200); //Window偏移
SetWindowOrgEx(hdc,-50,-50,NULL);
Rectangle(hdc,-200,-200,200,200); EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

  

最新文章

  1. VBA: Cant find project or librar
  2. Shopping(山东省第一届ACM省赛)
  3. 新学C++的for,switch和随机数
  4. JAVA线程池原理详解一
  5. javascript学习第三课引用类型object
  6. NVelocity 在.Net的三种用法
  7. 关于SWT的容器类之----面板Composite类和Group类
  8. DropDownList 绑定数据后 插入一条不属于表中的数据
  9. Documentation | AnsibleWorks
  10. #MainTest
  11. win7安装JDK6
  12. bzoj5055 膜法师
  13. 如何在ubuntu中安装php
  14. Django2.0.1开发框架搭建
  15. MariaDB MariaDB、MySQL存储过程、游标基础应用举例说明
  16. C#访问远程主机资源的方法,多种方式
  17. 微信小程序的wx-charts插件
  18. angularjs 中的scope继承关系——(2)
  19. jquery正则表达式验证:验证身份证号码
  20. Spring点滴一:Spring Ioc 容器

热门文章

  1. 【分块】【哈希】bzoj3578 GTY的人类基因组计划2
  2. python3 开发面试题(字典和拷贝)5.30
  3. Spring Boot中使用MyBatis注解配置详解
  4. 使用jQuery操作DOM(ppt练习)
  5. iOS 获取自定义cell上按钮所对应cell的indexPath.row的方法
  6. C#测试程序运行时间
  7. webpack导入es6的简单应用
  8. Python数据整合与数据准备-BigGorilla实例应用
  9. Python 的 LEGB 规则(转载)
  10. WPF动画制作简单的按钮动画