GDI基础一

本文主要介绍了Windows图形设备接口(GDI)的基础知识,包括如何创建窗口、绘制基本图形、设置颜色和字体等,旨在帮助初学者理解GDI编程的基本概念和操作。
摘要由CSDN通过智能技术生成

CPaintDC
针对OnPaint()函数进行,
OnPaint()首先构造一个CPaintDC()对象,再调用OnPreoareDC(),再来调用OnDraw()进行绘图。
void CMyView::OnPaint()
{
 CPaintDC dc(this);
 OnPrepareDC(&dc);
 dc.TextOut(0,0,"Hi!");
 OnDraw(&dc);
}
CPaintDC类自动调用BeginPaint(),析构自动调用EndPaint().

2.CClientDC
CClientDC()只能在窗口的客户区(不包括边框、标题栏、菜单栏、状态栏)中进行绘图。
(0,0)通常指的是客户区的左上角。
为了便于绘图,往往先调用CWnd::GetClientRect()来获取窗口客户区大小。
CClientDC()构造函数调用GetDC(),析构函数调用ReleaseDC().

3.CWindowDC
CWindowDC()允许在屏幕的任意位置进行绘图,点(0,0)指整个屏幕的左上角。
在使用CWindowDC绘图时,通常先调用CWnd::GetWindowRect()来获取窗口在屏幕坐标系的
外框坐标,然后再调用CWnd::ScreenToClient()进行坐标转换。
CWindowDC dc(this);
CRect rectWindow;
GetWindowRect(rectWindow);
ScreenToClient(rectWindow);

4.CMetaFileDC
CMetaFileDC封装了在一个Windows图元文件中绘图的方法。使用步骤如下:
1)构造一个CMetaFileDC()对象,并调用Create()函数;
2)向此对象发送所需要的CDC绘图命令,如:MoveTo()、LineTo()
3)调用成员函数Close()关闭设备环境,并返回HMETAFILE句柄。
4)使用CDC::PlayEnhMetaFile()来播放图元文件或者调用CopyMetaFile等函数对图元文件
进行其他处理。

构造CDC对象,以为Window限制了环境设备的数目,最好是在堆栈中构造对象:
void CMyView::MyFunction()
{
 ...
 CRect rect;
 CClientDC dc(this);
 dc.GetClipBox(rect);
 ...
}

GetDeviceCaps():获取显示参数,物理宽高(毫米)、逻辑宽高(像素)、分辨率等。

设备坐标:指显示设备或者打印设备坐标系下的坐标,单位像素。对于窗口视图而言,设备坐标的原点在客户区的左上角。
逻辑坐标:在各种映射模式下的坐标。缺省时,逻辑坐标和设备坐标是一致的。
物理坐标:由程序员自己定义的坐标。精度更准确。

MM_TEXT映射模式:X向右递增,Y向下递增;调用CDC的SetViewportOrg()和SetWindowOrg()函数来改变该模式下的坐标原点位置。
void CMyView::OnDraw(CDC* pDC)
{
 pDC->SetMapMode(MM_TEXT);
 pDC->SetWindowOrg(CPoint(100, 100));
 pDC->Rectangle(CRect(100, 100, 300, 300));
}

"固定比例"映射模式:X向右递增,Y向下递减;实际的比例因子不同。

"可变比例"映射模式:MM_ISOTROPIC和MM_ANISOTROPIC,允许改变比例因子和坐标原点。当用户改变了窗口尺寸时,绘制的图形大小也会发生相应的变化。
在MM_ISOTROPIC映射模式下,纵横比总是1:1,无论比例因子如何变化圆总是圆࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值