【C++自绘控件】如何用GDI+来显示图片

在我们制作一个应用软件的时候往往需要在窗口或控件中添加背景图。而图片不仅有BMP格式的,还有JPEG、PNG、TIFF、GIF等其它的格式。那么如何用jpg格式的图片来当背景呢?

这里用到了GDI+,顾名思义,其实GDI+是对GDI的优化,在GDI的甚础上添加了其它的许多功能,其中就包括”多种图像格式的支持”。

下面且看在MFC中是如何用GDI+来显示图片的。

====================================================================================================================

一、首先在”StdAfx.h”头文件中加载静态链接库:

#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
#endif

若不用”StdAfx.h”头文件的也可以直接用下面代码即可:

#include "GdiPlus.h"
using namespace Gdiplus;

二、在App类或Dlg类中添加成员变量

public:
    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_gdiplusToken;

三、在InitInstance()函数中开启GDI+

GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);

四、在ExitInstance()函数中关闭GDI+

GdiplusShutdown(m_gdiplusToken);

五、根据图片资源的路径来显示图片,比如在一个OnPaint()函数中

Graphics graphics(this->GetDC()->m_hDC);
Image image(L"res\\2013.jpg", FALSE);
graphics.DrawImage(&image,0,0);

Original: https://www.cnblogs.com/riskyer/p/3424257.html
Author: you Richer
Title: 【C++自绘控件】如何用GDI+来显示图片

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535136/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Modern C++ 模板通用工厂

    Modern C++ 模板通用工厂 1 简单应用示例 1.1 示例代码 1.2 分析说明 2 简单工厂模式 2.1 示例代码 2.2 分析说明 3 工厂 + 静态注册 3.1 示例…

    C++ 2023年5月29日
    065
  • C++11智能指针处理Array对象

    //C++11的//完全可以避免写手动的delete代码,//但是它默认使用delete删除对象,//如果是数组对象,需要指定自定义的删除方法,支持delete[]std::sha…

    C++ 2023年5月29日
    039
  • C++实现的各种排序算法

    提起排序算法相信大家都不陌生,或许很多人已经把它们记得滚瓜烂熟,甚至随时可以写出来。最近在学习这一块, 索性就把各种内部排序算法总结归纳了一下: 1、 算法分类: 十种常见排序算法…

    C++ 2023年5月29日
    047
  • libj 0.8.2 发布,Java/JavaScript API 的 C++ 实现

    libj 0.8.2 增加了一些新的字符串相关的方法。 libj 是一个跨平台的运行库,相当于提供了类似 Java/JavaScript API。libj 的内存管理是自动的,基于…

    C++ 2023年5月29日
    048
  • c++报错: No viable overloaded ‘=’ 临时变量与引用参数 const

    对于一个函数的参数为引用,如果想接收临时变量,就必须加上 const。 class A{ public: A(int aa) {} }; void f(A& a) { };…

    C++ 2023年5月29日
    050
  • Silverlight5通过P/Invoke调用自定义C/C++ DLL(Lua)

    注1:为了确保silverilght5在浏览器或桌面上成功调用win32 DLL,必须在项目属性中勾选相应的权限: 勾选Enable running application out…

    C++ 2023年5月29日
    074
  • c++使用用空格拼接字符串_accumulate用法

    std::accumulate(std::begin(x), std::end(x), string(), [](string &ss, string &s){re…

    C++ 2023年5月29日
    074
  • (转载)C++lambda表达式

    C++ 语言中的lambda表达式在很多情况下提供了函数对象的另一种实现机制。Lambda表达式并不是STL所特有的,但它广泛应用于这一环境中。Lambda是表达式是定义一个没有名…

    C++ 2023年5月29日
    065
  • VC++之自定义消息

    用户可以自定义消息,在应用程序中主动发出,这种消息一般用于应用程序的某一部分内部处理。 实例说明: 当用户按键盘上的光标上移键时,程序发送用户自定义消息,在对应的消息响应函数中弹出…

    C++ 2023年5月29日
    061
  • (筆記) 常用設定暫存器值的編程技巧 (SOC) (C/C++) (C) (Verilog)

    Abstract設定暫存器值是寫firmware時最常見的控制,本文歸納出C語言在寫firmware時常見的編程技巧,並與Verilog相互對照。 Introduction本文將討…

    C++ 2023年5月29日
    086
  • C++ 中 malloc/free与 new/delete区别

    new/delete 通常来说是操作符,就是”+”,”-“一样,malloc/free 是 C++/C 语言的标准库函数 —— 本质…

    C++ 2023年5月29日
    064
  • 【转载】C++中替代sprintf的std::ostringstream输出流详解

    一、简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中。ostringstream类通常用于执行C风格的串流的输出操作,格式化字符…

    C++ 2023年5月29日
    045
  • C++ 回调函数(CallBack)的用法分析

    本文实例分析了C++中回调函数(CallBack)的用法。分享给大家供大家参考。具体分析如下: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。其错误是…

    C++ 2023年5月29日
    047
  • C++ #ifndef、#define、#endif作用

    在C++项目中,#ifndef、#define、#endif非常常见,接下来就来简单说一下它们的作用。 作用:防止头文件被重复引用,防止被重复编译。 简介: ifndef 它是if…

    C++ 2023年5月29日
    072
  • C++11 静态断言 static_assert

    我们知道,C++现有的标准中就有assert、#error两个方法是用来检查错误的,除此而外还有一些第三方的静态断言实现。 assert是运行期断言,它用来发现运行期间的错误,不能…

    C++ 2023年5月29日
    046
  • 【C++服务端技术】消息队列

    ThreadWorkUnit.h #pragma once #include #include #include "SafeQueue.h" namespace…

    C++ 2023年5月29日
    049
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球