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 之视口和窗口的更多相关文章

  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. 第三个sprint冲刺第三阶段

    公测版:

  2. 理解java的三大特性之继承

    学习来源:http://www.cnblogs.com/chenssy/p/3354884.html default 默认权限(包权限-同一个包可以访问) private 私有(类内部可以使用,继承的 ...

  3. mongo扩展错误

    make: *** [php_mongo.lo] Error 1 Ask Question 0   When I installed the Mongo PHP extension, the foll ...

  4. python主成分分析

    #-*- coding: utf-8 -*- #主成分分析 降维 import pandas as pd #参数初始化 inputfile = '../data/principal_component ...

  5. oracle小知识点

    一 . procedure和function: procedure和function在语法上几乎完全一样,使用上却有小小的差别, procedure可以单独的调用 在命令行直接exec pro_xxx ...

  6. spring cloud实战与思考(一) spring config全局配置方案设计

    “spring cloud”的配置中心工具“spring cloud config”提供了分布式系统配置文件集中管理解决方案.该工具功能强大,实现也很简单.网上可以搜索到很多开发教程和用例.本文并不是 ...

  7. Markdown 文件转化为work文档

    1. 电脑安装pandoc 链接:https://pan.baidu.com/s/12H5wLO0JWph5TjrbeJI6mg 密码:ssgs 下载安装包解压即可用.记得配置系统环境变量 2.命令行 ...

  8. 利用可变参数打印log

    // ConsoleApplication1.cpp: 定义控制台应用程序的入口点. // #pragma once #include <string> #include <Wind ...

  9. AC自动机-HDU3065-简单题

    http://acm.hdu.edu.cn/showproblem.php?pid=3065 需要记录匹配情况的AC自动机,没有清空一些数组导致wa了几发. /*------------------- ...

  10. Sigma Function LightOJ - 1336 (约数和为奇数)

    题意: 求1-n中约数和为偶数的数的个数 记住一个定理:...平方数 及其 平方数的2倍 的约数和为奇数  then....减啦 证明: ....我jiao着人家写的很详细,so 看看人家写的吧! 转 ...