一个、使用位图
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
版权声明:本文博客原创文章,博客,未经同意,不得转载。