再探win32绘制正弦图像的最优雅方法:DPtoLP
来源:互联网 发布:上海和数软件 编辑:程序博客网 时间:2024/05/16 01:08
一、引言
前面已经讨论了两种win32绘制正弦图像的方法,这里在学习小甲鱼的win32 SDK教程第27课时,看到了更加优雅的方法。使用设备坐标向逻辑坐标的转换。
二、讨论三种绘制方案
这里附上我之前讨论过的两种绘制正弦图像的方案地址。
Win API绘制y = sinx函数图像。
再探win32绘制正弦图像的另一种方法:指定映射模式。
这里总结如下:
第一种方式,不使用映射模式转换,使得我们在计算坐标位置的时候,使用数学方法进行计算,增加了算法的难度;
第二种方式,我们使用了映射模式转换,将逻辑空间单位转换成了设备空间单位,非常简单的实现了正弦函数的绘制,但是并不能很好的控制正弦图像的大小;
我们立马要说的第三种方式,我觉得是最优雅的方式:
使用映射模式转换,并且使用客户端的区域大小,将之进行设备坐标到逻辑坐标的转换(使用DPtoLP函数),从而简单的实现了正弦函数的绘制和大小的控制。
三、欣赏小甲鱼老师带来的优雅的代码
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ HDC hdc; PAINTSTRUCT ps; RECT rect; POINT apt[NUM]; int i; int iMapMode; static int cxClient, cyClient; switch (message) { case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); // 绘制辅助线 MoveToEx(hdc, 0, cyClient / 2, NULL); LineTo(hdc, cxClient, cyClient / 2); MoveToEx(hdc, cxClient / 2, 0, NULL); LineTo(hdc, cxClient / 2, cyClient); iMapMode = GetMapMode(hdc); // 设置映射模式 SetMapMode(hdc, MM_LOMETRIC); SetViewportOrgEx(hdc, 0, cyClient / 2, NULL); // 将当前客户端的设备坐标转换成逻辑坐标 GetClientRect(hwnd, &rect); DPtoLP(hdc, (PPOINT)&rect, 2); for (i = 0; i < NUM; i++) { // 使用逻辑坐标计算坐标位置 apt[i].x = i * (rect.right - rect.left) / NUM; apt[i].y = (int)(rect.top * sin(TWOPI * i / NUM)); } // 绘制正弦图像 MoveToEx(hdc, apt[0].x, apt[0].y, NULL); PolylineTo(hdc, apt, NUM); // 恢复原来的映射模式 SetMapMode(hdc, iMapMode); EndPaint(hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam);}
四、总结
对待一个问题,要寻找各个方法去解决它,寻找最优解。
0 0
- 再探win32绘制正弦图像的最优雅方法:DPtoLP
- 再探win32绘制正弦图像的另一种方法:指定映射模式
- Android的Canvas绘制正弦函数图像
- ActionScript 正弦函数图像绘制
- 利用Android的Canvas绘制正弦函数图像
- 利用Android的Canvas绘制正弦函数图像
- 正弦余弦曲线的绘制动画
- 正弦函数的绘制的一种方法。(坐标变换与放大)
- DPtoLP的符号问题
- 使用Pandas的Series方法绘制图像
- 绘制正弦函数曲线
- C# 使用.NET性能计数器示例 绘制出正弦函数图像
- windows 下如何使用 Lua 语言绘制正弦函数图像?代码
- 控制台绘制正弦/余弦曲线
- 控制台绘制正弦/余弦曲线
- 使用pandas的DataFrame的plot方法绘制图像
- 安卓中drawBitmap绘制图像方法
- java 多线程 正弦图像移动
- poj2488
- 基于restful 风格的Echart图标系统续
- Scala之匿名内部类
- HDU
- Java注解
- 再探win32绘制正弦图像的最优雅方法:DPtoLP
- 细说JDK动态代理的实现原理
- 接口
- 前端页面和数据库同步进行增删改查
- 软件工程视频小结
- 论文引介 | Dual Learning for Machine Translation
- 关于云风在 Lua 中实现面向对象的源码分析
- Java泛型对方法重载的影响(二)
- Android内存优化(一)