在MM_TEXT映射模式下使用这两个函数。

对于

  1. BOOL SetViewportOrgEx(
  2. HDC hdc, // 设备内容HANDLE
  3. int X, // 新Viewport的x坐标
  4. int Y, // 新Viewport的y坐标
  5. LPPOINT lpPoint // 原来的Viewport的坐标
  6. );

这样逻辑点(0,0)将映射到设备点(X,Y),即(X,Y)成为了原点。

对于

  1. BOOL SetWindowOrgEx(HDC hdc, int X, int Y, LPPOINT lpPoint);

SetWindowOrgEx函数的参数总是以逻辑单位的形式给出

  1. #include <Windows.h>
  2.  
  3. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  4.  
  5. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
  6. {
  7. static TCHAR szAppName[] = TEXT("WNDCLASS NAME");
  8. HWND hwnd;
  9. MSG msg;
  10. WNDCLASS wndclass;
  11.  
  12. wndclass.style = CS_HREDRAW | CS_VREDRAW;
  13. wndclass.lpfnWndProc = WndProc;
  14. wndclass.cbClsExtra = ;
  15. wndclass.cbWndExtra = ;
  16. wndclass.hInstance = hInstance;
  17. wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  18. wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  19. wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  20. wndclass.lpszMenuName = NULL;
  21. wndclass.lpszClassName = szAppName;
  22.  
  23. if (!RegisterClass(&wndclass)) {
  24. MessageBox(NULL, TEXT("窗口创建失败!需要Windows NT!(传递消息为UNICODE)"), szAppName, MB_ICONERROR);
  25.  
  26. return ;
  27. }
  28.  
  29. hwnd = CreateWindow(
  30. szAppName,
  31. TEXT("Hk_Mayfly"),
  32. WS_OVERLAPPEDWINDOW,
  33. CW_USEDEFAULT,
  34. CW_USEDEFAULT,
  35. CW_USEDEFAULT,//宽度
  36. CW_USEDEFAULT,//高度
  37. NULL,
  38. NULL,
  39. hInstance,
  40. NULL
  41. );
  42. ShowWindow(hwnd, iCmdShow);
  43. UpdateWindow(hwnd);
  44.  
  45. while (GetMessage(&msg, NULL, , )) {
  46. TranslateMessage(&msg);
  47. DispatchMessage(&msg);
  48. }
  49.  
  50. return msg.wParam;
  51. }
  52.  
  53. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
  54. HDC hdc;
  55. PAINTSTRUCT ps;
  56. static int iMapMode;
  57. TCHAR szBuffer[] = L"Hk_Mayfly!!!!?";
  58. static int cxClient, cyClient;
  59.  
  60. switch (message) {
  61. case WM_SIZE:
  62. cxClient = LOWORD(lParam);
  63. cyClient = HIWORD(lParam);
  64. return ;
  65. case WM_PAINT:
  66. hdc = BeginPaint(hwnd, &ps);
  67. //
  68. TextOut(hdc, , , TEXT("●"), );
  69. SelectObject(hdc, CreateSolidBrush(RGB(, , )));//蓝色
  70. Ellipse(hdc, , , , );
  71. SelectObject(hdc, CreateSolidBrush(RGB(,,)));//绿色
  72. Ellipse(hdc, cxClient - , cyClient - , cxClient, cyClient);
  73.  
  74. //2
  75. //SetViewportOrgEx(hdc, cxClient / 2, cyClient / 2, NULL);//将逻辑点(0,0)映射到设备点(cxClient / 2,cyClient / 2),即将(cxClient / 2,cyClient / 2)作为(0,0)点
  76. /*TextOut(hdc, 0, 0, TEXT("●"), 1);
  77. SelectObject(hdc, CreateSolidBrush(RGB(0, 245, 255)));
  78. Ellipse(hdc, 0, 0, 100, 100);
  79. SelectObject(hdc, CreateSolidBrush(RGB(67, 205, 128)));
  80. Ellipse(hdc, cxClient - 100, cyClient - 100, cxClient, cyClient);*/
  81.  
  82. //
  83. /*将逻辑点(cxClient / 2,cyClient / 2)映射到设备点(0,0),将(0,0)点作为(0,200)*/
  84. /*SetWindowOrgEx(hdc, cxClient / 2, cyClient / 2, NULL);
  85. TextOut(hdc, 0, 0, TEXT("●"), 1);
  86. SelectObject(hdc, CreateSolidBrush(RGB(0, 245, 255)));
  87. Ellipse(hdc, 0, 0, 100, 100);
  88. SelectObject(hdc, CreateSolidBrush(RGB(67, 205, 128)));
  89. Ellipse(hdc, cxClient - 100, cyClient - 100, cxClient, cyClient);*/
  90. EndPaint(hwnd, &ps);
  91. return ;
  92. case WM_DESTROY:
  93. PostQuitMessage();
  94. return ;
  95. }
  96. return DefWindowProc(hwnd, message, wParam, lParam);
  97. }

1.

2.

3.

SetViewportOrgEx和SetWindowOrgEx的更多相关文章

  1. 【转载】GDI 映像方式 之 SetViewportOrgEx 与 SetWindowOrgEx 解析

    SetViewportOrgEx 与 SetWindowOrgEx 解析 这两个函数,用来改变视端口和窗口的原点,并都具有改变轴的效果,以致(0,0)不再指左上角. 「视端口」是依据设备坐标(图素)的 ...

  2. 【转载】GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析

    所谓视口代表设备,比如屏幕. 窗口代表我们的思维. 我们对windows说在(5,6)处画个点(调用GDI函数).windows认为是在我们的思维的(5,6)处画了个点.(也就是说5,6是逻辑坐标,G ...

  3. 【转载】关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解

    关于SetWindowOrgEx.SetViewportOrgEx.SetViewportExtEx 和SetWindowExtEx 详解 1.  SetWindowOrgEx是设置窗口的原点坐标. ...

  4. SetViewportOrgEx(视口) 与 SetWindowOrgEx(窗口) 解析

    SetViewportOrgEx (hdc,x/2,y/2) 视口中心点设置到窗口中心 获取客户群x和y,x/2,y/2 ,这样中心点就到窗口中间了. SetWindowOrgEx(hdc,-x/2, ...

  5. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  6. 第18章 图元文件_18.1 老式图元文件格式(wmf)

    18.1 老式图元文件格式(wmf) (1)创建图元文件:HDC hdcMeta = CreateMetaFile(lpszFile); ①如果lpszFile为NULL则图元文件存储在内存中,如果指 ...

  7. 第16章 调色板管理器_16.4 一个DIB位图库的实现(1)

    16.4.1自定义的 DIBSTRUCT结构体 字段 含义 PBYTE *ppRow ①指向位图视觉上最上面的一行像素.(不管是自下而上,还是自上而下) ②放在第一个字段,为的是后面定义宏时可方便访问 ...

  8. 第15章 设备无关位图_15.2 显示和打印DIB

    15.2.1 探究DIB (1)DIB文件的结构 整个文件 紧凑DIB(整个文件除文件头) 文件头(File Header) 信息头(Information Header) 信息头(Informati ...

  9. 第14章 位图和位块传输_14.4 GDI位图对象(1)

    14.4.1 创建DDB (1)创建 HBITMAP= CreateBitmap(cx,cy,cPlanes,cBitsPixel,lpBits); 参数 说明 cx,cy 指定位图宽度和高度,单位为 ...

随机推荐

  1. XMPP即时通讯协议使用(七)——利用Strophe实现WebIM及strophe.plugins插件使用

    Strophe简介与Openfire配置 Strophe.js是为XMPP写的一个js类库.因为http协议本身不能实现持久连接,所以strophe利用BOSH模拟实现持久连接. 官方文档: http ...

  2. 【学术篇】bzoj2440 [中山市选2011]完全平方数

    -题目の传送门- 题目大意: 找到第k个无平方因子数. 看到数据范围很大, 我们要采用比\(O(n)\)还要小的做法. 考虑如果前\(x\)个数中有\(k-1\)个无平方因子数, 而前\(x+1\)个 ...

  3. Linux系统理解以及Linux系统学习心得

    原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 说一下我对Lin ...

  4. ThreadPoolTaskExecutor使用详解

    当我们需要实现并发.异步等操作时,通常都会使用到ThreadPoolTaskExecutor,现对其使用稍作总结. 配置ThreadPoolTaskExecutor通常通过XML方式配置,或者通过Ex ...

  5. Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)

    Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...

  6. macOS系统安装gnuplot(解决Terminal type set to unknown)

    macOS 下使用 Homebrew 安装 gnuplot brew install gnuplot 在 terminal 中输入gnuplot进入模式之后,提示_Terminal type set ...

  7. Gene Ontology (GO) 注释

    Gene Ontology (GO) 注释  Posted on 2017-06-11 |  In 生信 相似的基因在不同物种中,其功能往往保守的.显然,需要一个统一的术语用于描述这些跨物种的同源基因 ...

  8. Jenkins之配置GitHub-Webhook2

    什么是持续集成(Continuous integration) 提出者Martin Fowler本人对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每 ...

  9. springMVC接收请求参数的几种方式

    1.  用注解@RequestParam绑定请求参数 用注解@RequestParam绑定请求参数a到变量a,当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,例如: ...

  10. SQL Server 2008性能故障排查(三)——IO

    接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完全加载到物理内存中,否则SQLServer会不断地把数据库文件从缓 ...