学习windows编程 day4 之视口和窗口
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- HDC hdc;
- PAINTSTRUCT ps;
- RECT rect;
- static int cxClient, cyClient;
- static int iMapMode;
- switch (message)
- {
- case WM_SIZE:
- cxClient = LOWORD(lParam);
- cyClient = HIWORD(lParam);
- break;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- GetClientRect(hwnd, &rect);
- //视口和窗口
- //逻辑坐标系统 ->窗口(程序员编码的)
- //设备坐标系统 -> 视口(眼睛看到的)
- //映射模式决定逻辑坐标的单位
- //设备坐标的单位是像素
- //在窗口下编程,在视口下显示
- MoveToEx(hdc, cxClient / , , NULL);
- LineTo(hdc, cxClient / , cyClient);
- MoveToEx(hdc, , cyClient / , NULL);
- LineTo(hdc, cxClient, cyClient / );
- //获取旧的映射模式
- iMapMode = GetMapMode(hdc);
- //设置新的 x向右 y向上 单位 0.1mm
- SetMapMode(hdc, MM_LOMETRIC);
- //设置视口
- SetViewportOrgEx(hdc, cxClient / , cyClient / , NULL); //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)
- TextOut(hdc, , , L"ViewPort", );
- EndPaint(hwnd, &ps);
- break;
- case WM_DESTROY:
- PostQuitMessage();
- return ;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
正弦函数练习
- #define NUM 1000
#define PI 3.1415926- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- HDC hdc;
- PAINTSTRUCT ps;
- RECT rect;
- static int cxClient, cyClient;
- static int iMapMode;
- POINT apt[];
- switch (message)
- {
- case WM_SIZE:
- cxClient = LOWORD(lParam);
- cyClient = HIWORD(lParam);
- break;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- GetClientRect(hwnd, &rect);
- //视口和窗口
- //逻辑坐标系统 ->窗口(程序员编码的)
- //设备坐标系统 -> 视口(眼睛看到的)
- //映射模式决定逻辑坐标的单位
- //设备坐标的单位是像素
- //在窗口下编程,在视口下显示
- MoveToEx(hdc, , cyClient/, NULL);
- LineTo(hdc, cxClient, cyClient/);
- MoveToEx(hdc, , , NULL);
- LineTo(hdc, , cyClient);
- //获取旧的映射模式
- iMapMode = GetMapMode(hdc);
- //设置视口
- SetViewportOrgEx(hdc, , cyClient / , NULL); //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)
- for (int i = ; i < NUM;i++)
- {
- apt[i].x = cxClient / NUM*i; //单位不一致,需要测试
- apt[i].y = -(int)( * sin( * PI*i / NUM));
- }
- Polyline(hdc, apt, );
- EndPaint(hwnd, &ps);
- break;
- case WM_DESTROY:
- PostQuitMessage();
- return ;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
坐标转换
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- HDC hdc;
- PAINTSTRUCT ps;
- RECT rect;
- static int cxClient, cyClient;
- static int iMapMode;
- POINT apt[];
- switch (message)
- {
- case WM_SIZE:
- cxClient = LOWORD(lParam);
- cyClient = HIWORD(lParam);
- break;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- GetClientRect(hwnd, &rect);
- //视口和窗口
- //逻辑坐标系统 ->窗口(程序员编码的)
- //设备坐标系统 -> 视口(眼睛看到的)
- //映射模式决定逻辑坐标的单位
- //设备坐标的单位是像素
- //在窗口下编程,在视口下显示
- //设备坐标转换为逻辑坐标 DPtoLP
- //逻辑坐标转换为设备坐标 LPtoDP
- MoveToEx(hdc, , cyClient/, NULL);
- LineTo(hdc, cxClient, cyClient/);
- MoveToEx(hdc, , , NULL);
- LineTo(hdc, , cyClient);
- //获取旧的映射模式
- iMapMode = GetMapMode(hdc);
- SetMapMode(hdc,MM_LOMETRIC);
- DPtoLP(hdc, &rect, ); //句柄,POINT指针,点个数 rect是两个点,矩形左上,右下
- //设置视口
- SetViewportOrgEx(hdc, , cyClient / , NULL); //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)
- for (int i = ; i < NUM;i++)
- {
- apt[i].x = rect.right*i / NUM; //单位不一致,需要测试
- apt[i].y = (int)(rect.bottom/ * sin( * PI*i / NUM));
- }
- Polyline(hdc, apt, );
- EndPaint(hwnd, &ps);
- break;
- case WM_DESTROY:
- PostQuitMessage();
- return ;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
学习windows编程 day4 之视口和窗口的更多相关文章
- 学习windows编程 day4 之 自定义映射
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
- 学习windows编程 day4 之 绘制随机矩形和peekMessage
#include <windows.h> #include <strsafe.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT messa ...
- 学习windows编程 day4 之 盯裆猫
写着写着就困了.... 看这些测量数据就算了,是对各种函数的练习 #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT ...
- 学习windows编程 day4 之 多边矩形填充
#include <windows.h> #include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, ...
- 学习windows编程 day4 之 映射模式
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
- 学习windows编程 day4 之 矩形的操作
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
- 学习windows编程 day4 之 设置画刷
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
- 有一定基础的 C++ 学习者该怎样学习 Windows 编程?
人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...
- 我为什么学习Windows编程
前一段时间在看TCP/IP,在图书馆里面找了不少的书,其中有几本书还是不错的.比如: <Windows网络与通信程序设计(第二版)> 王艳平著 <WinSock网络编程经络> ...
随机推荐
- js/jquery禁止页面回退
$(function() { //防止页面后退 history.pushState(null, null, document.URL); window.addEventListener('popsta ...
- 第三个spring冲刺第1天
在第二阶段,我们的要实现的基本功能都已经基本是实现了,现在在第三阶段,我们会完善算法的改进.容错问题的兼容还有附加的其他功能,例如计时等
- 探秘Java中的String、StringBuilder以及StringBuffer(转载)
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一 ...
- 在-for 循环里面如何利用ref 操作dom
由于dom 元素是在渲染之后才能操作,所以如果想取到dom元素,要放到mounted()这个生命周期函数里面,并且还要用this.$nextTick(function () {})
- [转载]oracle 高水位线详解
一.oracle 高水位线详解 出处: https://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html 一.什么是水线(High Wa ...
- MES方向准备
与WMS系统对接,实现MES系统中原材料入库.采购退货.生产订单.原材料出库.成品入库单.完工报告.成品出库单.成品入库单.成品出库单.标准出货.出货计划等数据与单据作业数据同步. 车间立体仓库.AG ...
- python之attrgetter函数对对象排序
# 使用attrgetter函数对对象排序 # attrgetter处理对象,itemgetter处理序列 from operator import attrgetter class user(): ...
- Lodop打印设计(PRINT_DESIGN)里的快捷键
Lodop打印控件,给开发人员提供了可视化编辑工具,编辑后可生成代码,然后复制到自己程序代码中,让开发更简单,打印设计中有一些快捷键也能让开发更便捷. 打印设计快捷键:ctrl 多个选中Shift 左 ...
- Luogu4782 【模板】2-SAT 问题(2-SAT)
模板.注意若x=y不一定是废话,x=0或x=0表示x必须为0.以及数组开2n. #include<iostream> #include<cstdio> #include< ...
- MVC WebApi 图片上传和显示
1 MVC中显示 内存流 中的图片.(不是图片文件) 创建一个Index用来显示 Action: public ActionResult Index() { return View(); } csht ...