• Win32 Windows计划 十一年


    一个、使用位图

    1 位图 - 由图像上的各点的颜色被保存,生成对应的位图文件

    栅格 - 保存图像可以理解为晶格

    矢量图 - 能够理解为画图命令的保存

    2 位图的使用

    2.1 载入位图

    LoadBitmap

    2.2 创建放置位图的DC

    CreateCompatibleDC

    2.3 将位图放入创建的DC中

    SelectObject

    2.4 绘制位图到当前DC中

    BitBlt

    StretchBlt 能够实现图像的缩放。可是缩放的效果不好

    2.5 取出位图

    SelectObject

    2.6 删除创建的DC

    DeleteDC

    2.7 删除位图

    DeleteObject

    2.8 获取位图信息

    int GetObject(
      HGDIOBJ hgdiobj,  // handle to graphics object      GDI对象句柄 这里就是HBITMAP
      int cbBuffer,     // size of buffer for object information  位图信息的BUFF的大小
      LPVOID lpvObject  // buffer for object information  	 位图信息的BUFF指针
    );
    位图的BUFF结构为BITMAP结构

    二 坐标系和映射模式

    1 坐标系

    1.1 设备坐标系

    设备坐标系以像素为单位。x正方向从左往右,y正方向从上往下

    屏幕坐标系 - 以屏幕的左上角为(0,0)点

    窗体坐标系 -  以窗体最外边框的左上角为(0,0 )点

    客户区坐标系 - 以窗体内的客户区的左上角为(0, 0) 点

    1.2 逻辑坐标系

    以逻辑单位定义的坐标系。

    画图过程中使用的坐标基本是以逻辑坐标系绘制 默认情况下和设备坐标系保持一致,

    可是能够改动

    2 映射模式

    逻辑坐标系和设备坐标系之间的映射关系

    2.1 映射模式的种类

    MM_TEXT - 默认的映射方式,逻辑坐标系和设备坐标系一致

    MM_LOMETRIC - 0.1MM  X 方向一致 Y方向相反

    MM_HIMETRIC  -  0.01MM    X 方向一致 Y方向相反

    MM_LOENGLISH - 0.1inX     方向一致 Y方向相反

    MM_HIENGLISH - 0.01inX     方向一致 Y方向相反

    MM_TWIPS - 1/1400in 方向一致 Y方向相反

    MM_ANISOTROPIC  -  能够指定逻辑单位 XY方向能够指定          X轴单位能够不等于 Y轴单位

    MM_ISOTROPIC       - 能够指定逻辑单位  XY的方向也能够指定。 X轴单位 = Y轴单位

    3  映射模式的使用

    3.1 设置映射模式

    int SetMapMode(
      HDC hdc,        // handle to device context 映射的句柄
      int fnMapMode   // new mapping mode 新的映射方式
    ); //返回旧的映射模式

    3.2 画图

    3.3 回复旧映射模式

    int SetMapMode(
      HDC hdc,        // handle to device context
      int fnMapMode   // new mapping mode
    );

    3.4 MM_ISOTROPIC 

    须要自己设计X/Y轴的正方向以及逻辑单位和设备单位的比例

    设备坐标  像素

    BOOL SetWindowExtEx(
      HDC hdc,       // handle to device context
      int nXExtent,  // new horizontal window extent
      int nYExtent,  // new vertical window extent
      LPSIZE lpSize  // original window extent
    );

    逻辑坐标 

    BOOL SetViewportExtEx(
      HDC hdc,       // handle to device context
      int nXExtent,  // new horizontal viewport extent
      int nYExtent,  // new vertical viewport extent
      LPSIZE lpSize  // original viewport extent
    );

    通过加入正负号设置Y轴方向

    2.3 坐标系的原点

    2.3.1 窗体坐标系 - 逻辑坐标系

    视口坐标系 - 设备坐标系

    2.3.2 窗体坐标系和视口坐标系原点重合

    SetViewPortOrgEx  设备坐标系原点相应逻辑坐标系的位置

    SetWindowOrgEx  逻辑坐标系原点相应设备坐标系的位置


    三 文字和字体

    1 文字的绘制

    1.1 TextOut

    1.2 DrawText

    int DrawText(
      HDC hDC,          // handle to DC
      LPCTSTR lpString, // text to draw
      int nCount,       // text length
      LPRECT lpRect,    // formatting dimensions
      UINT uFormat      // text-drawing options
    );
    1.3 ExtTextOut

    对于汉字字符。因为一个字符占2个字节,所以汉字字符之间的间距应该为0

    1.4 字符绘制的相关属性

    SetTextColor 设置字符的颜色

    SetBkColor 设置背景色

    SetBkMode 绘制的方式

    2 字体

    2.1 创建字体

    HFONT CreateFont(
      int nHeight,               // height of font	字体的逻辑高
      int nWidth,                // average character width 字体的逻辑宽
      int nEscapement,           // angle of escapement	字符倾斜度	
      int nOrientation,          // base-line orientation angle 字符的旋转
      int fnWeight,              // font weight		加粗	
      DWORD fdwItalic,           // italic attribute option	斜体	
      DWORD fdwUnderline,        // underline attribute option	下划线
      DWORD fdwStrikeOut,        // strikeout attribute option	中划线
      DWORD fdwCharSet,          // character set identifier	字符集
      DWORD fdwOutputPrecision,  // output precision		输出精度
      DWORD fdwClipPrecision,    // clipping precision		剪切
      DWORD fdwQuality,          // output quality		输出质量
      DWORD fdwPitchAndFamily,   // pitch and family			
      LPCTSTR lpszFace           // typeface name 			字体名称
    );

    2.2 设置字体

    SlectObject

    2.3 画图

    2.4 取出字体

    SelectObject

    2.5 删除字体

    DeleteObject

    四、对话框

    1 对话框的分类

    无模式对话框 - 对话框显示后。不影响其它窗体的使用

    有模式对话框 - 对话框显示后,会将其它的窗体禁止输入

    2 对话框的基本使用方式

    2.1 对话框的窗体处理函数

    2.2 注冊窗体

    2.3 创建对话框

    2.4 关闭对话框

    3 对话框资源

    4 有模式对话框的使用

    4.1 加入对话框资源

    4.2 定义对话框窗体处理函数

    INT_PTR CALLBACK DialogProc(
      HWND hwndDlg,  // handle to dialog box
      UINT uMsg,     // message
      WPARAM wParam, // first message parameter
      LPARAM lParam  // second message parameter
    );

    4.3 创建对话框

    INT_PTR DialogBox(
      HINSTANCE hInstance,  // handle to module
      LPCTSTR lpTemplate,   // dialog box template
      HWND hWndParent,      // handle to owner window
      DLGPROC lpDialogFunc  // dialog box procedure
    );

    4.4 关闭对话框

    BOOL EndDialog(
      HWND hDlg,        // handle to dialog box
      INT_PTR nResult   // value to return
    );
    返回值就是nResult









    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    c# 子窗体打开或者切换就最大化
    TreeView失去焦点时亮显选中状态
    解决 RecursionError: maximum recursion depth exceeded
    CentOS7安装jdk1.8
    CentOS7安装mysql5.7
    CentOS7安装redis3.2.3
    CentOS7安装nginx1.8
    centos7设置redis开机自启动
    Linux下执行sh脚本报错:$' ': command not found
    Linux下使用unhide查看隐藏文件
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4754642.html
Copyright © 2020-2023  润新知