• GDI+ Hello World


    学WTL/MFC,学不会了去看WIN32。

    学C/C++,学不会了去看汇编。

    使用VS,不明白了去用cl.exe/link.exe


    控制台下输出图片的分辨率:

    #include <windows.h>
    #include <gdiplus.h>
    #include <stdio.h>
    using namespace Gdiplus;
    
    INT main()
    {
       GdiplusStartupInput gdiplusStartupInput;
       ULONG_PTR gdiplusToken;
       GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    
       Image *image = new Image(L"ing.png");
       printf("The width of the image is %u.
    ", image->GetWidth());
       printf("The height of the image is %u.
    ", image->GetHeight()); 
    
       delete image;
       GdiplusShutdown(gdiplusToken);
       return 0;
    }
    



    GDI+和GDI区别以及一些新特征

    http://www.cnblogs.com/kekec/archive/2010/09/28/1837427.html

    详细使用说明见MSDN:

    https://msdn.microsoft.com/en-us/library/vs/alm/ms533802(v=vs.85).aspx

    /**
    * @file tutorial.cpp
    * @CopyRight (C) http://blog.csdn.net/x_iya
    * @brief Gdiplus学习记录
    * @author lgh1992314@qq.com
    * @date 2016-09-26
    */
    
    #include <windows.h>
    #include <gdiplus.h>
    using namespace Gdiplus;
    #pragma comment (lib,"Gdiplus.lib")
    
    VOID OnPaint(HDC hdc, RECT rect)
    {
    	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);
    }
    
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    	PSTR szCmdLine, int iCmdShow)
    {
    	static TCHAR		szAppName[] = TEXT("GdiPlus");
    	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 = szAppName;
    
    	if (!RegisterClass(&wndclass))
    	{
    		MessageBox(NULL, TEXT("This program requires Windows NT!"),
    			szAppName, MB_ICONERROR);
    		return 0;
    	}
    
    	hwnd = CreateWindow(szAppName,// window class name
    		TEXT("Gdiplus"),			// 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;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	HDC         hdc;
    	PAINTSTRUCT ps;
    	RECT        rect;
    
    	switch (message)
    	{
    	case WM_CREATE:
    		return 0;
    
    	case WM_PAINT:
    		hdc = BeginPaint(hwnd, &ps);
    
    		GetClientRect(hwnd, &rect);
    
    		OnPaint(hdc, rect);
    
    		DrawText(hdc, TEXT("Hello World"), -1, &rect,
    			DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    
    		EndPaint(hwnd, &ps);
    		return 0;
    
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0;
    	}
    	return DefWindowProc(hwnd, message, wParam, lParam);
    }


    加载图片:

    VOID OnPaint(HDC hdc, RECT rect)
    {
    	Graphics    graphics(hdc);
    	Image image(TEXT("ing.png"));
    	graphics.DrawImage(&image, rect.left, rect.top, (rect.right - rect.left), (rect.bottom - rect.top));
    }


    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    谈谈年度最佳代码“不管你们信不信,反正我信了”
    如何:用对称密钥对 XML 元素进行加密
    WPF 线程间访问控件
    xml和模型对象之间的序列化和反序列化
    [转]汇编语言的准备知识给初次接触汇编者 3
    asp.net mvc 自定义路由 【asp.net mvc 自学笔记】
    [转]汇编语言的准备知识给初次接触汇编者 2
    sftpd 启动 报错: vsftpd:500 OOPS: bad bool value in config file for: anonymous_enable
    Linux iptables配置FTP的主动和被动模式
    cacti安装完后就停留在登陆界面,输入默认的用户名密码登陆不进去!
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/6616366.html
Copyright © 2020-2023  润新知