Windows GDI 映射模式(出自:Windows程序设计第5版-珍藏版)
2024-08-28 13:14:57
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;
}
最新文章
- VBA: Cant find project or librar
- Shopping(山东省第一届ACM省赛)
- 新学C++的for,switch和随机数
- JAVA线程池原理详解一
- javascript学习第三课引用类型object
- NVelocity 在.Net的三种用法
- 关于SWT的容器类之----面板Composite类和Group类
- DropDownList 绑定数据后 插入一条不属于表中的数据
- Documentation | AnsibleWorks
- #MainTest
- win7安装JDK6
- bzoj5055 膜法师
- 如何在ubuntu中安装php
- Django2.0.1开发框架搭建
- MariaDB MariaDB、MySQL存储过程、游标基础应用举例说明
- C#访问远程主机资源的方法,多种方式
- 微信小程序的wx-charts插件
- angularjs 中的scope继承关系——(2)
- jquery正则表达式验证:验证身份证号码
- Spring点滴一:Spring Ioc 容器