C++控制台与GDI+(桌面上显示图片)

原创 2015年07月08日 18:13:07

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文件中需要添加

#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif

这一块代码是为了防止VC6无法识别ULONG_PTR类型

然后在stdafx.h中加入下面的代码,为当前工程引入头文件和库文件

#include <Gdiplus.h>
#pragma comment(lib, "gdiplus.lib")

5、接下来paint.cpp中添加全局变量

Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;

和GDIPlus库命名空间

using namespace Gdiplus;

好了,GDIPlus的配置到此结束,接下来介绍GDIPlus的使用。

GDIPlus使用与图片显示的实现

1、主函数中添加GDIPlus开启函数

Gdiplus::GdiplusStartup(&m_pGdiToken, &m_gdiplusStartupInput, NULL);

记住结束的时候需要执行GDIPlus关闭函数

Gdiplus::GdiplusShutdown(m_pGdiToken);

2、由于程序需要在桌面上直接显示图片,因此需要获得桌面句柄,在paint.cpp中加入头文件

#include<windows.h>

3、下面就是具体的实现过程了,直接贴代码

    //获取桌面句柄
    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");

上述仅供学习使用,当然,内容也不是很完美,抛砖引玉,能够为大家提供帮助,定感荣幸。:)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

GDI屏幕输出,在当前计算机的桌面上进行绘画

现在可以在桌面上进行绘画了,但是当何时进行重绘,现在还没有解决方法。using System;using System.Runtime.InteropServices;using System.Dra...

深入剖析基于并发AQS的(独占锁)重入锁(ReetrantLock)及其Condition实现原理

在阅读本篇博文前,建议有CAS知识储备,因为关于CAS的操作在ReetrantLock的实现原理中可是随处可见,如没有了解过CAS可以先看博主的另一篇博文【Java并发编程-无锁CAS与Unsafe类...

CSDN日报20170725——《新的开始,从研究生到入职亚马逊》

开始适应新生活,也重新开始走自己的学习节奏。希望渐渐能多写一些技术文章,继续学习进步!这篇“回归”的文章就先简要总结一下这一年半的经历吧,也算是给过去的生活画上个句号。

Centos7下caffe的安装

很无奈的开个头,最近装了好几次caffe,前面由于没有记录完整而详细的过程,以致于这次安装的过程中除了很多问题,现在特此留博客一篇记录一下细节的部分,免得下次继续入坑。首先列一下本文档下适合的环境,和...

DELL M3200I配置

正所谓难者不会,会者不难,在此简单记录一下实现DELL M3200I的配置过程,方便自己查阅和服务网友朋友。实验室在购买DELL M3200I磁盘阵列的时候,箱子里附带了一张光盘,里面包含Dell P...

图像算法研究---背景虚化算法

本文在抠图算法基础上,实现了一种如何实现单反背景虚化效果的算法,更具单反的真实感,跟大家分享一下!

在终端里面显示图片

Linux终端里面可谓是奇妙无限,很多优秀的软件都诞生在终端里面。相较之下,Windows本身的理念和Linux就不一致,所以,你懂得。 下面,我们不妨先思考一下,如何在终端里面显示一张图片?在终端...

C++控制台程序显示图形窗口以及窗口程序显示控制台

一、控制台程序显示图形窗口 新建一个控制台程序,代码如下 #include #include int main() {     printf("Console");     Messag...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)