setgraphicsmode

本文详细介绍了SetGraphicsMode函数的功能及使用方法。该函数用于设置指定设备环境的图形模式,支持两种模式:GM_COMPATIBLE(默认)和GM_ADVANCED。在不同模式下,文字输出、矩形绘制和弧线绘制等行为有所不同。
  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1193665761703&lmt=1193665780&format=336x280_as&output=html&correlator=1193665761687&url=http%3A%2F%2Fwww.codeguru.cn%2Fpublic%2Fiframe%2Fwinapiiframe.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=1285758818.1193665762&ga_sid=1193665762&ga_hid=111695597&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_his=8&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency">     函数功能:该函数为指定的设备环境设置图形模式。

    函数原型:int SetGraphicsMode(HDC hdc, int iMode);

    参数:

    hdc:指向设备环境的句柄。

    iMode:指定图形模式,该参数可为下列值之一:

    GM_COMPAIBLE:设置与16位Windows相兼容的图形模式,这是缺省的模式。如果指定此值,应用程序只能通过调用设置窗口视窗范围和原点的函数来改变全局到设备的转换,但不是通过利用SetWorldTransform或ModifyWorldTransform,调用这些函数将失败,设置窗口和视窗范围和原点的函数的例子为SetViewportExtEx和SetwindowExtEx函数。

    GM_ADVANCED:Windows NT和Windows 98:设置高级图形模式,允许全局转换。如果应用程序设置或改变指定设备环境的全局转换,必须规定该值在这种模式中,所有的图形,包括文本输出,全部转换为设备环境规定的全局到设备的转换。

    Windows 95:不支持GM_ADVANCED,当操作增强的元文件时,Windows 95试图使Windows95中的增强的元文件看起来与在Windows NT上操作一样。为完成此功能,Windows 95当操作指定的增强元文件记录时,可以模仿GM_ADVANCED模式。

    返回值:如果调用成功,返回值为老图形模式,调用失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。

    备注:根据图形模式,有3种不同的表格输出:

    TextOutput:在GM_COMPATIBLE模式中,TrueType(或矢量字体)文本输出时的操作方式就该DC中全局到设备转换而言很象光栅字体文本输出。TrueType文本总是按从左到右和从上到下的顺序写,即使图形的剩余部分在X或Y轴被翻动,只有TrueType(或矢量字体)文本的高被定为合适的高度,在GM_COMPATIBLE模式中写非水平文本的唯一办法,是为该设备环境中选举的字体指定非零表格的大小和方向。

    在GM_ADVANCED模式中TrueType(或矢量字体)文本输出完全转换为设备环境中域到设备的转换,光栅字体只有很受局限的转换能力(通过某些整型系数来伸展)。图形设备界面(GDI)试图创造出最好的输出。

    Rectangle Exclusion:如果设置缺省的GM_COMPATIBLE图形模式,当画长方形时,系统不包括底部和最右的边。GM_ADVANCED图形模式应用于画底边和右边包括在内的长方形。

    Arc Drawing:如果设置缺省的GM_COMPATIBLE图形为模式,GDI用设备空间中当前弧的方向来画弧,根据此协议,弧不管页面到设备的转换,此转换要求沿着X或Y轴的翻动。如果设置了GM_ADVANCED图形模式,GDI总是在逻辑空间逆时针方向画弧。这就是说在GM_COMPATIBLE图形模式中,弧控制点和弧本身,都全遵从设备环境的全局到设备的转换。

    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib。

// TODO: 在此处为本机数据添加绘制代码 CView::OnDraw(pDC); // 设置映射模式和坐标系(确保原点居中,y轴向上) CRect rect; GetClientRect(&rect); // 获取客户区大小 pDC->SetMapMode(MM_ANISOTROPIC); // 设置自适应映射模式 pDC->SetWindowExt(rect.Width(), rect.Height()); // 设置窗口范围 pDC->SetViewportExt(rect.Width(), -rect.Height()); // 设置视区范围:y向上为正方向 pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2); // 设置原点为中心 rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2); // 校正客户区矩形 // 定义金刚石图案参数 int r = 300; // 圆的半径 int n = 10; // 点数 CPoint P[10]; // 存储点坐标的数组 // 计算角度参数(使用数学常量PI) const double PI = 3.1415926535; double Theta = 2 * PI / n; // 角度间隔 Δθ double Alpha = PI / 10; // 起始角 α(可调整) // 计算所有点在圆上的位置 for (int i = 0; i < n; i++) { P[i].x = static_cast<int>(r * cos(i * Theta + Alpha) + 0.5); // 四舍五入取整 P[i].y = static_cast<int>(r * sin(i * Theta + Alpha) + 0.5); // 四舍五入取整 } // 创建蓝色画笔 CPen bluePen(PS_SOLID, 1, RGB(0, 0, 255)); // 蓝色 CPen* pOldPen = pDC->SelectObject(&bluePen); // 连接所有点对:两层循环实现 for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { pDC->MoveTo(P[i]); // 移动到起点 pDC->LineTo(P[j]); // 画线到终点 } } 在这段代码的基础上,mfc实现一个金刚石可以依据定时器实现自动旋转的效果
最新发布
10-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值