GDI&GDI+程序入门

#define UNICODE
#include <windows.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;

 

VOID OnPaint(HDC hdc)
{
 Graphics graphics(hdc);

 int stat;
 GraphicsPath path;
 SolidBrush  brush(Color(255, 255, 0, 0));
 Pen blackPen(Color(255, 0, 0, 0), 1);
 Pen greenPen(Color(255, 0, 255, 0), 10);
 Pen bluePen(Color(255, 0, 0, 255), 8);
 Pen penJoin(Color(255, 0, 0, 255), 8);
   
 //
 Image         image(L"Ascent.jpg");
 TextureBrush  tBrush(&image);
 Pen           texturedPen(&tBrush, 30);

 //
 graphics.DrawImage(&image, 10, 10);
 graphics.DrawImage(&image, 120, 100, image.GetWidth(), image.GetHeight());

 //加载一个图片
 graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());
 //在一个椭圆中加载一张图片
 graphics.DrawEllipse(&texturedPen, 300, 20, 200, 100);

 //
 stat = tBrush.SetTransform(&Matrix(75.0/640.0, 0.0f, 0.0f,
  75.0/480.0, 0.0f, 0.0f));
 stat = graphics.FillEllipse(&tBrush,Rect(0, 150, 150, 250));

    //draw string
 FontFamily  fontFamily(L"Times New Roman");
 Font        font(&fontFamily, 24, FontStyleRegular, UnitPixel);
 PointF      pointF(100.0f, 200.0f);
 graphics.DrawString(L"Hello World!", -1, &font, pointF, &brush);

 //在线上
 greenPen.SetAlignment(PenAlignmentCenter);
 // Draw the line with the wide green pen.
 graphics.DrawLine(&greenPen, 10, 100, 100, 50);
 // Draw the same line with the thin black pen.
 graphics.DrawLine(&blackPen, 10, 100, 100, 50);

 //在线里
 stat = greenPen.SetAlignment(PenAlignmentInset);
 // Draw the rectangle with the wide green pen.
 stat = graphics.DrawRectangle(&greenPen, 100, 100, 50, 50);
 // Draw the same rectangle with the thin black pen.
 stat = graphics.DrawRectangle(&blackPen, 100, 100, 50, 50);

 //带上箭头
 stat = bluePen.SetStartCap(LineCapArrowAnchor);
 //带上圆
 stat = bluePen.SetEndCap(LineCapRoundAnchor);
 stat = graphics.DrawLine(&bluePen, 20, 175, 300, 175);
 
 //可以弯折
 path.StartFigure();
 path.AddLine(Point(50, 200), Point(100, 200));
 path.AddLine(Point(100, 200), Point(100, 250));
 path.AddLine(Point(100, 250), Point(200, 250));//拼路径
 penJoin.SetLineJoin(LineJoinBevel);
 graphics.DrawPath(&penJoin, &path);

 //
 REAL dashValues[4] = {10, 2, 15, 4}; 
 blackPen.SetDashPattern(dashValues, 4);
 stat = graphics.DrawLine(&blackPen, Point(300, 300), Point(800, 300));

 //HatchStyleHorizontal
 //HatchStyleVertical
 //HatchStyleForwardDiagonal
 //HatchStyleBackwardDiagonal
 //HatchStyleCross
 //HatchStyleDiagonalCross
 //在各种形状内画的几种不同的网线
 HatchBrush hBrush(HatchStyleDiagonalCross, Color(255, 255, 0, 0),
  Color(255, 128, 255, 255));
 stat = graphics.FillEllipse(&hBrush, 0, 0, 100, 60);
 
//画曲线
 Point points[] = {Point(100, 200),
  Point(150, 180),
  Point(200, 120),
  Point(250, 180),
  Point(300, 200)};

 graphics.DrawCurve(&greenPen, points, 5);
}

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
//整理MSDN上的程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值