谢欣伦 - 原创教程 - 使用GDI+绘制抗锯齿斜线
早些年用过GDI的同学都知道,用GDI绘图API函数画斜线那个锯齿有多恶心。就像下图第一行的三条斜线:
坦白说,45度斜线在抗锯齿以前还是蛮抗锯齿的,哈哈,抗不抗都没什么差别。
那第二行很自然就看得出是抗锯齿之后的效果。
话不多说,直接给大家上代码。
创建Win32应用程序,在cpp文件的顶部加入GDI+的引用:
#include <windows.h> #include <objidl.h>
#define GDIPVER 0x0110
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus; #define MAX_LOADSTRING 100
在cpp文件的主函数内添加初始化程序:
// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_SVV, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance); GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); // 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
在cpp文件的窗口过程回调函数中添加绘制斜线的程序:
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
{
// TODO: 在此添加任意绘图代码...
Graphics graphics(hdc);
Pen pen(Color(, , , ), ); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeHighSpeed);
graphics.DrawLine(&pen, , , , ); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeAntiAlias8x8);
graphics.DrawLine(&pen, , , , ); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeHighSpeed);
graphics.DrawLine(&pen, , , , ); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeAntiAlias8x8);
graphics.DrawLine(&pen, , , , ); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeHighSpeed);
graphics.DrawLine(&pen, , , , ); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeAntiAlias8x8);
graphics.DrawLine(&pen, , , , );
}
EndPaint(hWnd, &ps);
break;
在cpp文件的主函数内添加反初始化程序:
// 主消息循环:
while (GetMessage(&msg, NULL, , ))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} GdiplusShutdown(gdiplusToken); return (int) msg.wParam;
打完,收工。
下载:抗锯齿演示程序 — SVV for Win7 32bit
谢欣伦 - 原创教程 - 使用GDI+绘制抗锯齿斜线的更多相关文章
- 谢欣伦 - 原创软件 - 工具软件 - 快速关机Shutdown
快速关机Shutdown,含源码. 公司公用的笔记本电脑实在太烂,不知从什么时候开始关机永远都关不了,一直停留在“关闭系统中……”.忍无可忍之下,自己写了一个快速关机程序. 下载: Shutdown_ ...
- 谢欣伦 - 原创软件 - 游戏专题 - 我的桌面My Desktop
今天在网上看到一个用桌面背景当做拼图内容的游戏很新颖,反正今天下雨我也闲着,索性用了半天时间做了一个类似的游戏<MyDesktop>.做完后立即分享给了两个朋友,他俩都被吓坏了.现在分享给 ...
- 谢欣伦 - 原创软件 - 游戏专题 - 操蛋的小鸟Fucking Bird
前段时间朋友介绍了一个最近很火的游戏<Flappy Bird>.在工作之余,我用了三天时间做了一个类似的游戏<Fucking Bird>.一开始分享给了两个女同事,发现她们玩嗨 ...
- 谢欣伦 - OpenDev原创教程 - 媒体开发库libMedia
libMedia是一个免费的简单的媒体开发库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 OpenDev for VS2012 libMedia提供四大功能,一是视频 ...
- 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRadio & CxBthRadioFind
这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRadioFind的使用如下: void CU ...
- 谢欣伦 - OpenDev原创教程 - 服务端套接字类CxServerSocket
这是一个精练的服务端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxServerSocket的使用如下(以某个叫做CSo ...
- 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRemoteDeviceFind
这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRemoteDeviceFind的使用如下: ...
- 谢欣伦 - OpenDev原创教程 - 无连接套接字类CxUdpSocket
这是一个精练的无连接套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxUdpSocket的使用如下(以某个叫做CSomeC ...
- 谢欣伦 - OpenDev原创教程 - 串口类CxSerial
这是一个精练的串口类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. 串口类CxSerial的使用如下(以某个叫做CSomeClass ...
随机推荐
- 小Writeup
Misc 100 下载文件之后是一个zip压缩包.因为一开始没有给任何提示信息,题目也什么都没说,爆破了一会无果.同时不是伪加密,所以应该是明文攻击.之后官方给出提示,是一个网址. F12进入调试,发 ...
- 201521123028 《Java程序设计》第13周学习总结
本周学习总结 书面作业 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? Ans:cec.jmu.edu ...
- 控制结构(6) 最近最少使用(LRU)
// 上一篇:必经之地(using) // 下一篇:程序计数器(PC) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. There are only two hard thin ...
- SQL知识点大纲图
这是我整理出来的SQL大纲图.
- birt 报表设计总结
1, 通过sql查询出来的数据,当某个字段没有值时,我们期望显示别的东东 在表格单元格或者网格中选中这个值, 在属性编辑器-->映射--> 在映射表中添加映射条件 映射中当使用 等于 时, ...
- 框架应用:Spring framework (四) - 事务管理
事务控制 事务是什么?事务控制? 事务这个词最早是在数据库中进行应用,讲的用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位. 事务的管理是指一个事务的开启,内容添加, ...
- 我的Spring学习记录(二)
本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...
- angular $compiler
directive是如何被compiled HTML编译发生在三个阶段: 1.$compile遍历DOM节点匹配directives 如果compiler找到元素上的directive,directi ...
- 最小覆盖_KEY
最小覆盖(cover)..线段树 [题目描述] 给定 N 个区间[Li,Ri],需要你按照顺序选出一个区间序列使得[1,M]完全被覆盖.并且在选出来的序列中,某个区间[a,b]之前必须保证[1,a]都 ...
- SQL语言知识点总结
1.DQL.DML.DDL.DCL的概念与区别 一.SQL(Structure Query Language)语言是数据库的核心语言. SQL的发展是从1974年开始的,其发展过程如下: 1974年- ...