zoukankan      html  css  js  c++  java
  • 学习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 / 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);
    }
  • 相关阅读:
    [币严区块链]数字货币交易所之比特币(BTC)钱包对接 | 自建节点JSON-RPC访问
    [币严区块链]以太坊(ETH)Dapp开发入门教程之宠物商店领养游戏
    一句话的设计模式
    在线捉鬼游戏开发
    华容道程序求解
    利用多态,实现一般处理程序(ashx)中的AOP(切面编程)
    客户端-服务器端互动比较与原生实例(比较ajax,server-sent event,websocket/netsocket)
    在线捉鬼游戏开发之三
    在线捉鬼游戏开发之三
    在线捉鬼游戏开发之三
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8511367.html
Copyright © 2011-2022 走看看