博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习windows编程 day4 之视口和窗口
阅读量:5098 次
发布时间:2019-06-13

本文共 3936 字,大约阅读时间需要 13 分钟。

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 / 2, 0, NULL);        LineTo(hdc, cxClient / 2, cyClient);        MoveToEx(hdc, 0, cyClient / 2, NULL);        LineTo(hdc, cxClient, cyClient / 2);        //获取旧的映射模式        iMapMode = GetMapMode(hdc);        //设置新的    x向右 y向上 单位 0.1mm        SetMapMode(hdc, MM_LOMETRIC);        //设置视口        SetViewportOrgEx(hdc, cxClient / 2, cyClient / 2, NULL);    //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)        TextOut(hdc, 100, 100, L"ViewPort", 8);        EndPaint(hwnd, &ps);        break;    case WM_DESTROY:        PostQuitMessage(0);        return 0;    }    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[1000];    switch (message)    {    case WM_SIZE:        cxClient = LOWORD(lParam);        cyClient = HIWORD(lParam);        break;    case WM_PAINT:        hdc = BeginPaint(hwnd, &ps);        GetClientRect(hwnd, &rect);//视口和窗口        //逻辑坐标系统 ->窗口(程序员编码的)        //设备坐标系统 -> 视口(眼睛看到的)        //映射模式决定逻辑坐标的单位        //设备坐标的单位是像素        //在窗口下编程,在视口下显示                MoveToEx(hdc, 0, cyClient/2, NULL);        LineTo(hdc, cxClient, cyClient/2);        MoveToEx(hdc, 0, 0, NULL);        LineTo(hdc, 0, cyClient);        //获取旧的映射模式        iMapMode = GetMapMode(hdc);        //设置视口        SetViewportOrgEx(hdc, 0, cyClient / 2, NULL);    //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)        for (int i = 0; i < NUM;i++)        {            apt[i].x = cxClient / NUM*i;    //单位不一致,需要测试            apt[i].y = -(int)(100 * sin(2 * PI*i / NUM));        }        Polyline(hdc, apt, 1000);        EndPaint(hwnd, &ps);        break;    case WM_DESTROY:        PostQuitMessage(0);        return 0;    }    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[1000];    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, 0, cyClient/2, NULL);        LineTo(hdc, cxClient, cyClient/2);        MoveToEx(hdc, 0, 0, NULL);        LineTo(hdc, 0, cyClient);        //获取旧的映射模式        iMapMode = GetMapMode(hdc);        SetMapMode(hdc,MM_LOMETRIC);        DPtoLP(hdc, &rect, 2);    //句柄,POINT指针,点个数    rect是两个点,矩形左上,右下        //设置视口        SetViewportOrgEx(hdc, 0, cyClient / 2, NULL);    //新的视口原点x,新的视口原点y,以及一个point指针用于存放原来视口位置(0,0)        for (int i = 0; i < NUM;i++)        {            apt[i].x = rect.right*i / NUM;    //单位不一致,需要测试            apt[i].y = (int)(rect.bottom/2 * sin(2 * PI*i / NUM));        }        Polyline(hdc, apt, 1000);        EndPaint(hwnd, &ps);        break;    case WM_DESTROY:        PostQuitMessage(0);        return 0;    }    return DefWindowProc(hwnd, message, wParam, lParam);}

 

转载于:https://www.cnblogs.com/ssyfj/p/8511367.html

你可能感兴趣的文章
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
在centos上开关tomcat
查看>>
黑马程序员——2 注释
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
查询消除重复行
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
Redis快速入门
查看>>
BootStrap---2.表格和按钮
查看>>