谢欣伦 - 原创教程 - 使用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 ...
随机推荐
- 201521123017 《Java程序设计》第14周学习总结
1. 本周学习总结 2. 书面作业 Q1.MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...
- 201521123003《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- linux segmentation fault记录
文章将记录linux学习使用中出现的各种segmentation fault,持续更新,希望对看到人有所帮助 1. linux pcap segmentation fault -- 2013.11.2 ...
- 移动商城第三篇【搭建Mybatis和Spring环境、编写Dao、Service在Core模块】
Mybatis和Spring环境搭建 由于我们的所编写的dao层.service代码可能前台和后台都需要用到的,因此我们把环境搭建在core模块中 逆向工程 首先,我们要做的就是品牌管理,我们首先来看 ...
- eclipse复制到IDEA中文不匹配,编译失败
今天使用把eclipse的包复制到Intellij Idea下,结果在编译的时候,它说我的数据是GBK,而Idea默认的数据是UTF-8,因此出错了... 解决:在项目中直接把对象的encoding. ...
- 浅谈SQL优化入门:1、SQL查询语句的执行顺序
1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...
- 学习率 Learning Rate
本文从梯度学习算法的角度中看学习率对于学习算法性能的影响,以及介绍如何调整学习率的一般经验和技巧. 在机器学习中,监督式学习(Supervised Learning)通过定义一个模型,并根据训练集上的 ...
- Visual Studio + Qt开发环境搭建
1. 安装Visual Studio 2015 Visual Studio 2015下载地址如下,安装比较常规,不做介绍. Visual Studio Enterprise 2015 with Upd ...
- E2195 cannot evaluate function call
E2195 cannot evaluate function call :e2195无法评估函数的调用 :问题的根源在于,对组件创建了不合理的触发事件导致的. :OK
- 实例讲解webpack的基本使用第一篇
更新文章不容易,尤其是更新高质量的文章更加不易,因此为了节约时间,闲话就不多说了.关于webpack的介绍,webpack是用来干嘛的,这些基础概念性的东西,就不在此赘述,下面直接开始正题. webp ...