C++控制台与GDI+(桌面上显示图片)
2015-07-08 18:13
781 查看
C++控制台与GDI+(桌面上显示图片)
VC6.0过时了,GDI+也算是过时的产品了,不过对于初学者来说还是蛮有学习意义的,而且网上存在很多GDI配置教程稍显杂乱,重点是很少有结合C++控制台来写的,正好最近需要做个demo需要用到这一块,可是很多知识都忘了。个人感觉写一篇博客确实有必要把能够在C++控制台下正常运行的程序编译出来的过程记录一下。下面说一下GDI+的配置
GDI+配置
1、下载gdi+库文件,http://download.csdn.net/detail/s2392735818/8881167免积分下载哦。
2、VC6.0中,打开Tools->Options->Directories,分别将GDIPlus文件夹下面的Includes文件夹,lib文件夹分别添加进去。
VS2010的配置可以看这个http://www.cnblogs.com/it20120227/archive/2011/12/31/2370903.html
3、接下来新建一个C++ Source File文件命名为paint.cpp,编译的时候,VC6.0会自动生成一个工程文件,下面需要再新建一个stdafx.h文件。
4、stdafx.h文件中需要添加
[code]#ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif
这一块代码是为了防止VC6无法识别ULONG_PTR类型
然后在stdafx.h中加入下面的代码,为当前工程引入头文件和库文件
[code]#include <Gdiplus.h> #pragma comment(lib, "gdiplus.lib")
5、接下来paint.cpp中添加全局变量
[code]Gdiplus::GdiplusStartupInput m_gdiplusStartupInput; ULONG_PTR m_pGdiToken;
和GDIPlus库命名空间
[code]using namespace Gdiplus;
好了,GDIPlus的配置到此结束,接下来介绍GDIPlus的使用。
GDIPlus使用与图片显示的实现
1、主函数中添加GDIPlus开启函数[code]Gdiplus::GdiplusStartup(&m_pGdiToken, &m_gdiplusStartupInput, NULL);
记住结束的时候需要执行GDIPlus关闭函数
[code]Gdiplus::GdiplusShutdown(m_pGdiToken);
2、由于程序需要在桌面上直接显示图片,因此需要获得桌面句柄,在paint.cpp中加入头文件
[code]#include<windows.h>
3、下面就是具体的实现过程了,直接贴代码
[code] //获取桌面句柄 HWND m_hWnd = ::GetDesktopWindow(); //在内存中建立一个Image的派生类Bitmap对象做为"画布" Bitmap memBitmap(512,512); Graphics memGr(&memBitmap); //这里可以通过memGr在memBitmap上绘制多个图元 Image* pimage=NULL; pimage=Image::FromFile(L"shirt.png"); int w = 601; //这里是"shirt.png"的宽度 int h = 672; //这里是"shirt.png"的高度 memGr.DrawImage(pimage,0,0,0,0,w,h,UnitPixel); delete pimage; pimage=NULL; HDC m_hDC = ::GetDC(0);//获取屏幕句柄 Graphics gr(m_hDC); gr.DrawImage(&memBitmap,0,0); ::ReleaseDC(m_hWnd,m_hDC); Gdiplus::GdiplusShutdown(m_pGdiToken); system("pause");
上述仅供学习使用,当然,内容也不是很完美,抛砖引玉,能够为大家提供帮助,定感荣幸。:)
相关文章推荐
- LeetCode-Minimum Size Subarray Sum-解题报告
- c++基本特性
- LeetCode-Course Schedule-解题报告
- c++ 动态创建二维数组
- c语言: 冒泡排序
- 动态链接库 隐式链接 首次接触分歧定义(同样字段cpp中翻译为export 头文件里翻译为import)
- c++ web服务器
- C/C++程序员简历模板
- C语言 system()函数打开一个程序,路径有空格的问题
- c++空类实例大小不是0原因
- 学堂在线C++进阶 编程题 10-2
- GetMemory错误讲解(指针练习)----C++面试之GetMemory问题
- C++ STL queue队列
- C++ STL stack栈
- C++容器-STL
- C++ STL deque可变数组
- 关于struct的细节
- 找不到min和max标识符—C++中头文件次序问题
- 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己:索引缓存的故事
- 【Visual C++】游戏开发笔记三十六 浅墨DirectX提高班之四 顶点缓存的逆袭