1. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3. HDC hdc;
  4. PAINTSTRUCT ps;
  5. RECT rect;
  6. static int cxClient, cyClient;
  7. static int iMapMode;
  8. switch (message)
  9. {
  10. case WM_SIZE:
  11. cxClient = LOWORD(lParam);
  12. cyClient = HIWORD(lParam);
  13. break;
  14. case WM_PAINT:
  15. hdc = BeginPaint(hwnd, &ps);
  16. GetClientRect(hwnd, &rect);
  17. //视口和窗口
  18. //逻辑坐标系统 ->窗口(程序员编码的)
  19. //设备坐标系统 -> 视口(眼睛看到的)
  20.  
  21. //映射模式决定逻辑坐标的单位
  22. //设备坐标的单位是像素
  23.  
  24. //在窗口下编程,在视口下显示
  25.  
  26. MoveToEx(hdc, cxClient / , , NULL);
  27. LineTo(hdc, cxClient / , cyClient);
  28. MoveToEx(hdc, , cyClient / , NULL);
  29. LineTo(hdc, cxClient, cyClient / );
  30. //获取旧的映射模式
  31. iMapMode = GetMapMode(hdc);
  32. //设置新的 x向右 y向上 单位 0.1mm
  33. SetMapMode(hdc, MM_LOMETRIC);
  34. //设置视口
  35. SetViewportOrgEx(hdc, cxClient / , cyClient / , NULL); //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)
  36.  
  37. TextOut(hdc, , , L"ViewPort", );
  38.  
  39. EndPaint(hwnd, &ps);
  40. break;
  41. case WM_DESTROY:
  42. PostQuitMessage();
  43. return ;
  44. }
  45.  
  46. return DefWindowProc(hwnd, message, wParam, lParam);
  47. }

正弦函数练习

  1. #define NUM 1000
    #define PI 3.1415926
  2.  
  3. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  4. {
  5. HDC hdc;
  6. PAINTSTRUCT ps;
  7. RECT rect;
  8. static int cxClient, cyClient;
  9. static int iMapMode;
  10. POINT apt[];
  11. switch (message)
  12. {
  13. case WM_SIZE:
  14. cxClient = LOWORD(lParam);
  15. cyClient = HIWORD(lParam);
  16. break;
  17. case WM_PAINT:
  18. hdc = BeginPaint(hwnd, &ps);
  19. GetClientRect(hwnd, &rect);
  20. //视口和窗口
  21. //逻辑坐标系统 ->窗口(程序员编码的)
  22. //设备坐标系统 -> 视口(眼睛看到的)
  23.  
  24. //映射模式决定逻辑坐标的单位
  25. //设备坐标的单位是像素
  26.  
  27. //在窗口下编程,在视口下显示
  28.  
  29. MoveToEx(hdc, , cyClient/, NULL);
  30. LineTo(hdc, cxClient, cyClient/);
  31. MoveToEx(hdc, , , NULL);
  32. LineTo(hdc, , cyClient);
  33. //获取旧的映射模式
  34. iMapMode = GetMapMode(hdc);
  35. //设置视口
  36. SetViewportOrgEx(hdc, , cyClient / , NULL); //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)
  37.  
  38. for (int i = ; i < NUM;i++)
  39. {
  40. apt[i].x = cxClient / NUM*i; //单位不一致,需要测试
  41. apt[i].y = -(int)( * sin( * PI*i / NUM));
  42. }
  43.  
  44. Polyline(hdc, apt, );
  45.  
  46. EndPaint(hwnd, &ps);
  47. break;
  48. case WM_DESTROY:
  49. PostQuitMessage();
  50. return ;
  51. }
  52.  
  53. return DefWindowProc(hwnd, message, wParam, lParam);
  54. }

坐标转换

  1. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3. HDC hdc;
  4. PAINTSTRUCT ps;
  5. RECT rect;
  6. static int cxClient, cyClient;
  7. static int iMapMode;
  8. POINT apt[];
  9. switch (message)
  10. {
  11. case WM_SIZE:
  12. cxClient = LOWORD(lParam);
  13. cyClient = HIWORD(lParam);
  14. break;
  15. case WM_PAINT:
  16. hdc = BeginPaint(hwnd, &ps);
  17. GetClientRect(hwnd, &rect);
  18. //视口和窗口
  19. //逻辑坐标系统 ->窗口(程序员编码的)
  20. //设备坐标系统 -> 视口(眼睛看到的)
  21.  
  22. //映射模式决定逻辑坐标的单位
  23. //设备坐标的单位是像素
  24.  
  25. //在窗口下编程,在视口下显示
  26.  
  27. //设备坐标转换为逻辑坐标 DPtoLP
  28. //逻辑坐标转换为设备坐标 LPtoDP
  29.  
  30. MoveToEx(hdc, , cyClient/, NULL);
  31. LineTo(hdc, cxClient, cyClient/);
  32. MoveToEx(hdc, , , NULL);
  33. LineTo(hdc, , cyClient);
  34.  
  35. //获取旧的映射模式
  36. iMapMode = GetMapMode(hdc);
  37. SetMapMode(hdc,MM_LOMETRIC);
  38.  
  39. DPtoLP(hdc, &rect, ); //句柄,POINT指针,点个数 rect是两个点,矩形左上,右下
  40.  
  41. //设置视口
  42. SetViewportOrgEx(hdc, , cyClient / , NULL); //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)
  43.  
  44. for (int i = ; i < NUM;i++)
  45. {
  46. apt[i].x = rect.right*i / NUM; //单位不一致,需要测试
  47. apt[i].y = (int)(rect.bottom/ * sin( * PI*i / NUM));
  48. }
  49.  
  50. Polyline(hdc, apt, );
  51.  
  52. EndPaint(hwnd, &ps);
  53. break;
  54. case WM_DESTROY:
  55. PostQuitMessage();
  56. return ;
  57. }
  58.  
  59. return DefWindowProc(hwnd, message, wParam, lParam);
  60. }

学习windows编程 day4 之视口和窗口的更多相关文章

  1. 学习windows编程 day4 之 自定义映射

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  2. 学习windows编程 day4 之 绘制随机矩形和peekMessage

    #include <windows.h> #include <strsafe.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT messa ...

  3. 学习windows编程 day4 之 盯裆猫

    写着写着就困了.... 看这些测量数据就算了,是对各种函数的练习 #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT ...

  4. 学习windows编程 day4 之 多边矩形填充

    #include <windows.h> #include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, ...

  5. 学习windows编程 day4 之 映射模式

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  6. 学习windows编程 day4 之 矩形的操作

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  7. 学习windows编程 day4 之 设置画刷

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  8. 有一定基础的 C++ 学习者该怎样学习 Windows 编程?

    人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...

  9. 我为什么学习Windows编程

    前一段时间在看TCP/IP,在图书馆里面找了不少的书,其中有几本书还是不错的.比如: <Windows网络与通信程序设计(第二版)> 王艳平著 <WinSock网络编程经络> ...

随机推荐

  1. js/jquery禁止页面回退

    $(function() { //防止页面后退 history.pushState(null, null, document.URL); window.addEventListener('popsta ...

  2. 第三个spring冲刺第1天

    在第二阶段,我们的要实现的基本功能都已经基本是实现了,现在在第三阶段,我们会完善算法的改进.容错问题的兼容还有附加的其他功能,例如计时等

  3. 探秘Java中的String、StringBuilder以及StringBuffer(转载)

    探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一 ...

  4. 在-for 循环里面如何利用ref 操作dom

    由于dom 元素是在渲染之后才能操作,所以如果想取到dom元素,要放到mounted()这个生命周期函数里面,并且还要用this.$nextTick(function () {})

  5. [转载]oracle 高水位线详解

    一.oracle 高水位线详解 出处: https://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html 一.什么是水线(High Wa ...

  6. MES方向准备

    与WMS系统对接,实现MES系统中原材料入库.采购退货.生产订单.原材料出库.成品入库单.完工报告.成品出库单.成品入库单.成品出库单.标准出货.出货计划等数据与单据作业数据同步. 车间立体仓库.AG ...

  7. python之attrgetter函数对对象排序

    # 使用attrgetter函数对对象排序 # attrgetter处理对象,itemgetter处理序列 from operator import attrgetter class user(): ...

  8. Lodop打印设计(PRINT_DESIGN)里的快捷键

    Lodop打印控件,给开发人员提供了可视化编辑工具,编辑后可生成代码,然后复制到自己程序代码中,让开发更简单,打印设计中有一些快捷键也能让开发更便捷. 打印设计快捷键:ctrl 多个选中Shift 左 ...

  9. Luogu4782 【模板】2-SAT 问题(2-SAT)

    模板.注意若x=y不一定是废话,x=0或x=0表示x必须为0.以及数组开2n. #include<iostream> #include<cstdio> #include< ...

  10. MVC WebApi 图片上传和显示

    1 MVC中显示 内存流 中的图片.(不是图片文件) 创建一个Index用来显示 Action: public ActionResult Index() { return View(); } csht ...