# GDI+
微软官方API文档地址 https://docs.microsoft.com/zh-cn/windows/desktop/gdiplus/-gdiplus-gdi-start
## 入门
+ ### 画线
本主题演示如何使用GDI Plus绘制线条。
要在Windows GDI +中绘制一条线,您需要一个Graphics对象,一个Pen对象和一个Color对象。的图形对象提供的DrawLine方法方法和笔对象保持线的属性,例如颜色和宽度。Pen对象的地址作为参数传递给DrawLine方法方法。
以下程序从(0,0)到(200,100)绘制一条线,由三个函数组成:WinMain,WndProc和OnPaint。在WinMain函数和WndProc的功能提供了常见的大多数Windows应用程序的基本代码。WndProc函数中没有GDI +代码。所述的WinMain函数具有GDI +代码,即所需要的呼叫的少量GdiplusStartup和GdiplusShutdown。实际创建Graphics对象并绘制线条的GDI +代码位于OnPaint函数中。
所述的OnPaint函数接收设备句柄上下文并传递句柄图形构造函数。传递给Pen构造函数的参数是对Color对象的引用。传递给颜色构造函数的四个数字表示颜色的alpha,红色,绿色和蓝色分量。alpha分量决定了颜色的透明度; 0是完全透明的,255是完全不透明的。传递给DrawLine方法方法的四个数字表示该行的起点(0,0)和终点(200,100)。
```
#include <stdafx.h>
#include <windows.h>
#include <objidl.h>
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
VOID OnPaint(HDC hdc)
{
Graphics graphics(hdc);
Pen pen(Color(255, 0, 0, 255));
graphics.DrawLine(&pen, 0, 0, 200, 100);
}
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wndClass;
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
// Initialize GDI+.
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = TEXT("GettingStarted");
RegisterClass(&wndClass);
hWnd = CreateWindow(
TEXT("GettingStarted"), // window class name
TEXT("Getting Started"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL); // creation parameters
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
GdiplusShutdown(gdiplusToken);
return msg.wParam;
} // WinMain
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
OnPaint(hdc);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
} // WndProc
```
请注意WinMain函数中对GdiplusStartup的调用。GdiplusStartup函数的第一个参数是ULONG_PTR的地址。GdiplusStartup使用稍后传递给GdiplusShutdown函数的标记填充该变量。GdiplusStartup函数的第二个参数是GdiplusStartupInput结构的地址。前面的代码依赖于默认的GdiplusStartupInput构造函数来适当地设置结构成员。
+ ### 绘制一个字符串
“ 绘制线条 ”主题显示了如何编写使用Windows GDI +绘制线条的Windows应用程序。要绘制字符串,请使用以下OnPaint函数替换该主题中显示的OnPaint函数:
```
VOID OnPaint(HDC hdc)
{
Graphics graphics(hdc);
SolidBrush brush(Color(255, 0, 0, 255));
FontFamily fontFamily(L"Times New Roman");
Font font(&fontFamily, 24, FontStyleRegular, UnitPixel);
PointF pointF(10.0f, 20.0f);
graphics.DrawString(L"Hello World!", -1, &font, pointF, &brush);
}
```
前面的代码创建了几个GDI +对象。的图形对象提供的DrawString方法的方法,其中实际的绘图。该SolidBrush对象指定字符串的颜色。
该的FontFamily构造函数接收标识字体系列单,字符串参数。FontFamily对象的地址是传递给Font构造函数的第一个参数。传递给Font构造函数的第二个参数指定字体大小,第三个参数指定样式。FontStyleRegular值是FontStyle枚举的成员,它在Gdiplusenums.h中声明。Font构造函数的最后一个参数表示字体的大小(在本例中为24)以像素为单位。UnitPixel的值是Unit枚举的成员。
传递给DrawString方法方法的第一个参数是宽字符串的地址。第二个参数-1指定字符串为空终止。(如果字符串不是以null结尾,则第二个参数应指定字符串中的宽字符数。)第三个参数是Font对象的地址。第四个参数是对PointF对象的引用,该对象指定将绘制字符串的位置。最后一个参数是Brush对象的地址,它指定字符串的颜色。
## 用笔绘制线条和形状
+ ### 使用笔绘制线条和矩形
要绘制直线和矩形,需要Graphics对象和Pen对象。的图形对象提供的DrawLine方法,并且笔的线的对象存储特征,例如颜色和宽度。
以下示例从(20,10)到(300,100)绘制一条线。假设图形是现有的Graphics对象。
```
Pen pen(Color(255, 0, 0, 0));
graphics.DrawLine(&pen, 20, 10, 300, 100);
```
第一个代码语句使用Pen类构造函数创建黑色笔。传递给Pen构造函数的一个参数是Color对象。用于构造Color对象的值- (255,0,0,0) - 对应于颜色的alpha,red,green和blue组件。这些值定义了不透明的黑色笔。
以下示例绘制一个矩形,其左上角位于(10,10)。矩形的宽度为100,高度为50.传递给Pen构造函数的第二个参数表示笔的宽度为5像素。
```
Pen blackPen(Color(255, 0, 0, 0), 5);
stat = graphics.DrawRectangle(&blackPen, 10, 10, 100, 50);
```
绘制矩形时,笔位于矩形边界的中心。因为笔宽为5,所以矩形的边被绘制为5个像素宽,使得在边界上绘制1个像素,在内部绘制2个像素,在外部绘制2个像素。有关笔对齐的更多详细信息,请参阅设置笔宽和对齐。
下图显示了生成的矩形。虚线表示如果笔宽为一个像素,则绘制矩形的位置。矩形左上角的放大视图显示粗黑线以这些虚线为中心。
+ ### 设置笔宽度和对齐方式
创建Pen对象时,可以将笔宽作为构造函数的参数之一提供。您还可以使用Pen :: SetWidth方法更改笔的宽度。
理论线的宽度为零。绘制线条时,像素位于理论线的中心。下面的示例绘制两次指定的行:一次使用宽度为1的黑色笔,一次使用宽度为10的绿色笔。
```
Pen blackPen(Color(255, 0, 0, 0), 1);
Pen greenPen(Color(255, 0, 255, 0), 10);
stat = greenPen.SetAlignment(PenAlignmentCenter);
// Draw the line with the wide green pen.
stat = graphics.DrawLine(&greenPen, 10, 100, 100, 50);
// Draw the same line with the thin black pen.
stat = graphics.DrawLine(&blackPen, 10, 100, 100, 50);
```
下面的示例绘制两次指定的矩形:一次�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【作品名称】:基于WIN32GDI+的贪吃蛇小游戏的设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于WIN32GDI+的贪吃蛇小游戏的设计与实现
资源推荐
资源详情
资源评论
收起资源包目录
GluttonousSnake-code.zip (63个子文件)
GluttonousSnake-code
GluttonousSnake.sln 1KB
GluttonousSnake
title.jpg 135KB
GluttonousSnake.ico 4KB
resource.h 1KB
meta.h 380B
res
images
title.jpg 20KB
down.png 20KB
left.png 20KB
food.png 20KB
捕获.PNG 48KB
up.png 20KB
right.png 20KB
body.png 22KB
small.ico 4KB
Node.h 360B
Snake.h 566B
Snake.cpp 2KB
GluttonousSnake.vcxproj.filters 3KB
GluttonousSnake.vcxproj 9KB
GluttonousSnake.rc 9KB
Node.cpp 583B
.gitignore 15B
MyWindow.h 466B
GluttonousSnake.vcxproj.user 165B
README.md 21KB
MyWindow.cpp 8KB
targetver.h 294B
Main.cpp 959B
.gitignore 9B
GDIPlus
Includes
GdiPlusMetaHeader.h 8KB
GdiPlusBitmap.h 21KB
GdiPlusGraphics.h 89KB
GdiPlusImageCodec.h 1KB
GdiPlusimageAttributes.h 13KB
GdiPlusFlat.h 83KB
GdiPlusHeaders.h 21KB
GdiPlusMetaFile.h 11KB
GdiPlusPath.h 48KB
GdiPlusInit.h 3KB
GdiPlusBrush.h 29KB
GdiPlusEnums.h 53KB
GdiPlusFontFamily.h 6KB
GdiPlus.h 3KB
GdiPlusColor.h 4KB
GdiPlusFontCollection.h 3KB
GdiPlusColorMatrix.h 2KB
GdiPlusMem.h 1KB
GdiPlusFont.h 6KB
GdiPlusTypes.h 17KB
GdiPlusCachedBitmap.h 2KB
GdiPlusBase.h 817B
GdiPlusStringFormat.h 9KB
GdiPlusRegion.h 12KB
GdiPlusImaging.h 23KB
GdiPlusGpStubs.h 3KB
GdiPlusMatrix.h 8KB
GdiPlusPen.h 13KB
GdiPlusLineCaps.h 6KB
GdiPlusPixelFormats.h 6KB
GdiPlus.lib 196KB
GDIPlus.zip 928KB
GdiPlus.dll 1.43MB
README.md 137B
共 63 条
- 1
资源评论
MarcoPage
- 粉丝: 4327
- 资源: 8838
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 小程序国际化方案 , The internationalizational (i18n) library for wechat miniprogram.zip
- Screenshot_20241130_222516.jpg
- 必看使用教程等4个文件.zip
- 2023-4-8-笔记-第一阶段-第2节-分支循环语句- 4.goto语句 5.本章完 -2024.11.30
- 小程序云开发管理系统.zip
- 2023-04-06-项目笔记 - 第三百三十三阶段 - 4.4.2.331全局变量的作用域-331 -2025.11.30
- 小程序中将html内容转化成wxml可以显示的内容,方便小程序中显示.zip
- 小程序demo.zip
- DB2基础教程.,DB2入门学习
- 小程序-口碑外卖.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功