学习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网络编程经络> ...
随机推荐
- 数学战神app(小学生四则运算app)开发需求及进度
项目名字:“数学战神” 开发环境:Android eclipse 团队名称:战神联盟 团队成员:陈思明,许家豪,王宏财,吴旭涛 在之前的四则运算APP中添加更多的实用功能,并在各种平台推广宣传. 预加 ...
- 转发--UIPATH http://baijiahao.baidu.com/s?id=1596656405106773890&wfr=spider&for=pc&qq-pf-to=pcqq.c2c
之前和朋友聊起RPA,他们第一反应就是哎哟,主流几家vendor太贵了. 我们公司业务量没有那么大,用不上啦~ 尤其Blue Prism和 Automation anywhere报价,一般规模的企业一 ...
- spring学习总结(一)_Ioc基础(上)
最近经历了许许多多的事情,学习荒废了很久.自己的目标成了摆设.现在要奋起直追了.最近发现了张果的博客.应该是一个教师.看了他写的spring系列的博客,写的不错.于是本文的内容参考自他的博客,当然都是 ...
- Bootstrap辅助类
前面的话 Bootstrap提供了一组工具类,用于辅助项目的开发.本文将详细介绍Bootstrap辅助类 文本色 通过颜色来展示意图,Bootstrap 提供了一组工具类.这些类可以应用于链接,并且在 ...
- JavaScript & Dom 之 基本语法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MT【34】正余弦的正整数幂次快速表示成正余弦的线性组合
问题:如何快速把$cos^4xsin^3x$表示成正弦,余弦的线性组合? 分析:利用牛顿二项式展开以下表达式: 再利用欧拉公式$e^{i\theta}=cos\theta+isin\theta$ 比如 ...
- MT【226】费马点两题
已知$z_1=2\sqrt{3}i,z_2=3,z_3=-3,|z_3-z_4|=2\sqrt{3},$则$|z_1-z_4|+|z_2-z_4|$的最小值为_____ 提示:费马点最小,取$Z_4( ...
- MT【67】窥一斑知全豹
已知$f(x)=ax^2+bx+c$在$x\in\{-1,0,1\}$时满足$|f(x)|\le1$ 求证:当$|x|\le1$时$|f(x)|\le\frac{5}{4}$. 证明: $$f(x)= ...
- MT【56】2017联赛一试解答最后一题:一道复数题的几何意义
- [hgoi#2019/2/16t1]math
题目描述 解法 我们稍微枚举一下前面几位,可以得到这样的规律. \[X_i=\frac{1}{2^{i+1}-1}\] \[Y_i=\frac{1}{2^{2^i}-1}\] 那么要使\(xm=yn\ ...