• 【笨嘴拙舌WINDOWS】GDI映射方式


    TextOut(hdc,100,100,TEXT(“Love China”),10)

    这句GDI函数的作用是在坐标点(100,100)的位置输出一个“Love China”字符串:

    image

    GDI函数作为硬件设备(显示器,打印机)的接口封装中间层,其传入的参数坐标值(100,100)要在设备上哪个位置显示,是通过GDI映射方式定义的!也就是说:

    (100,100) ----------------通过方式A映射之后,可以变成----------------》(1,1)

    (100,100) ----------------通过方式B映射之后,可以变成----------------》(10,1)

    (100,100) ----------------通过方式C映射之后,可以变成----------------》(1,3)

    (100,100) ----------------通过方式C映射之后,可以变成----------------》(5,1)

    左边这一列的坐标(100,100)就是一个逻辑坐标(所有GDI函数都是)

    右边这一列的坐标(1,1)就是一个设备坐标

    所谓映射,就是将一个值通过一个数学公式变成另外一个值

    以下是WINDOWS定义的各种映射模式

    “在默认情况下,WINDOWS的坐标原点在(0,0)点,但是可以通过调用SetWindowOrgEx来改变逻辑坐标点的原点,通过SetViewportOrgEx来改变设备坐标的原点;如果传入的参数有负号,还能够改变对应轴的正方向;X轴的正方向指向屏幕的右侧,不同的映射模式Y轴正方向不一样”

    MM_TEXT                      一个逻辑单位映射成一个像素      Y:指向屏幕下侧

    MM_LOMETRIC             一个逻辑单位映射成0.1mm        Y:(以下都指向上侧)

    MM_HIMETRIC              一个逻辑单位映射成0.01mm              

    MM_LOENGHLISH         一个逻辑单位映射成0.01英寸

    MM_HIENGLISH            一个逻辑单位映射成0.001英寸

    MM_TWIPS                   一个逻辑单位映射成1/1440英寸

    MM_ISOTROPIC             一个逻辑单位映射成自定义的设备单位

    MM_ANISOTROPIC        一个逻辑单位映射成自定义的设备单位

    “黑色背景的映射方式能改变逻辑坐标(也叫窗口)或者设备坐标(也叫视口)的范围

      不同之处:

    MM_ISOTROPIC在设置范围时WINDOWS将自动调整使得,逻辑坐标的X与设备坐标的X之比=逻辑坐标的Y与设备坐标的Y之比

    MM_ANISOTROPIC 不会调整

    image

    要在距离窗口左边距100像素,上边距100像素的位置写出一个I love you, China可以使用如下提供的各种

    Setmapmode(dc,MM_TEXT);
    SetViewportorgEx(dc,100,100,nil);
    逻辑坐标(0,0)对应设备坐标(100,100)

    textout(dc,0,0,'I love you, China',17);

    image

    Setmapmode(dc,MM_TEXT);
    SetWindowOrgEx(dc,100,100,nil);

    逻辑坐标(100,100)对应设备坐标(0,0)
    textout(dc,200,200,'I love you, China',17);

    Setmapmode(dc,MM_LOMETRIC);
    textout(dc,356,-356,'I love you, China',17);

    Setmapmode(dc,MM_HIMETRIC);
    textout(dc,3560,-3560,'I love you, China',17);

    Setmapmode(dc,MM_LOENGLISH);
    textout(dc,140,-140,'I love you, China',17);

    Setmapmode(dc,MM_ISOTROPIC);
    SetwindowExtEx(dc,getclientRect.Right,getclientrect.Bottom,nil);
    SetViewportExtEx(dc,getclientRect.Right,-getclientrect.Bottom,nil);
    textout(dc,100,100,'I love you, China',17);

    Setmapmode(dc,MM_ANISOTROPIC);
    SetwindowExtEx(dc,getclientRect.Right,getclientrect.Bottom,nil);
    SetViewportExtEx(dc,getclientRect.Right,getclientrect.Bottom,nil);
    textout(dc,100,100,'I love you, China',17);

  • 相关阅读:
    perl 模拟curl 发送json数据
    perl put 发送数据
    8小时浓度均值即连续8个小时浓度的平均值
    awk 字段匹配
    rsyslog imfile配置
    EasyUI datetimebox 的onchange事件的问题
    5大领先的商业智能解决方案,国产上榜!
    5大领先的商业智能解决方案,国产上榜!
    perl post 带中文名字的文件
    Openstack 实现技术分解 (2) 虚拟机初始化工具 — Cloud-Init & metadata & userdata
  • 原文地址:https://www.cnblogs.com/pavkoo/p/3300779.html
Copyright © 2020-2023  润新知