14)载入png图片
1)之前在窗口中载入图片 一般都是bmp的 但是 我想从网上下一些图片,这些图片可能是png的
2)那么就有了下面的操作
3)png图片可以直接做成透明的。
4)首先是创建窗口的基本代码:
#include<Windows.h> //这个叫 窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE://点那个×,窗口关闭
::PostQuitMessage();//消息推出
break; }
return ::DefWindowProc( hWnd, uMsg, wParam, lParam);
} int CALLBACK WinMain(HINSTANCE hIstance,
HINSTANCE hPreInstance,
LPSTR pCmdLine,
int nCmdShow)
{ HBRUSH hBrush=::CreateSolidBrush(RGB(,,)); //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
WNDCLASSEX wndclass;
wndclass.cbClsExtra=;
wndclass.cbWndExtra=;//这两个是确定是否要分配额外的空间
wndclass.cbSize=sizeof(WNDCLASSEX);
wndclass.hbrBackground=hBrush;
wndclass.hCursor=NULL;//光标
//因为上面的那个LoadCUrsor是需要字符串,但是那个IDC_CURSOR1是一个整型数字,所以 需要用那个宏给转定义一下
wndclass.hIcon=NULL;//窗口图标
wndclass.hIconSm=NULL;//窗口左上的图标
wndclass.hInstance=hIstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="wangchao";
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW; //2.注册
if(::RegisterClassEx(&wndclass)==FALSE)
{
::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK); return ;
}
//3.创建 HWND hWnd=::CreateWindow("wangchao","xiao_hua",WS_OVERLAPPEDWINDOW,,,,,NULL,NULL,hIstance,NULL); if(hWnd==NULL)
{
::MessageBox(NULL,"创建失败","提示",MB_OK);
return ;
}
//4.显式 ::ShowWindow(hWnd,SW_SHOW); //5.消息循环 MSG msg; while(::GetMessage(&msg,,,))
{
//第一步先翻译
::TranslateMessage(&msg);
//第二部分发
::DispatchMessageA(&msg); } ::DeleteObject(hBrush);
}
5)然后添加一个新的头文件:
#include<Windows.h>
#include<gdiplus.h>//GDI+的头文件
using namespace std;
using namespace Gdiplus;//GDI+的命名空间 #pragma comment(lib,"gdiplus.lib")//加载GDI+的库,去导入一个库 //这个叫 窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
6)下面的步骤是 :
①要去调用一个开始去做GDI+操作的那一个函数
::GdiplusStartup(); //开始
这个函数不懂 直接按下F1去查帮助
得到下面的回答
Status GdiplusStartup(
__out ULONG_PTR token *token,
__in const GdiplusStartupInput *input,
__out GdiplusStartupOutput *output
); 第一个是令牌 我也不知道是啥 但是他是__out这个类型 也就是返回值 所以 我要用一个 ULONG_PTR类型的东西 接着
第二个是输入的东西 那么 我就得赋值了
第三个 我也是得用一个变量接着 那么 我怎么写接着呢:
①定义一个变量ULONG_PTR ulToken,因为他是需要一个接着这个out值的指针,所以 我把ulToken的地址扔进去
②再定义一个变量 GdiplusStartupInput gdiplusStartupInput;
③最后一个不用接着的变量,直接是NULL就行
②关闭GDI+
::DeleteObject(hBrush);
//================②游戏关闭 我要关闭GDI+
//这个的变量为啥是这个,看帮助文档来的
::GdiplusShutdown(uLong_ptr);
return ;
}
7)总的代码展示:
#include<Windows.h>
#include<gdiplus.h>//GDI+的头文件
using namespace std;
using namespace Gdiplus;//GDI+的命名空间 #pragma comment(lib,"gdiplus.lib")//加载GDI+的库,去导入一个库 //这个叫 窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE://点那个×,窗口关闭
::PostQuitMessage();//消息推出
break; }
return ::DefWindowProc( hWnd, uMsg, wParam, lParam);
} int CALLBACK WinMain(HINSTANCE hIstance,
HINSTANCE hPreInstance,
LPSTR pCmdLine,
int nCmdShow)
{ //============①要去调用一个开始去做GDI+操作的那一个函数============
ULONG_PTR uLong_ptr;
GdiplusStartupInput gdiplusStartupInput;
::GdiplusStartup(&uLong_ptr,&gdiplusStartupInput,NULL); HBRUSH hBrush=::CreateSolidBrush(RGB(,,)); //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
WNDCLASSEX wndclass;
wndclass.cbClsExtra=;
wndclass.cbWndExtra=;//这两个是确定是否要分配额外的空间
wndclass.cbSize=sizeof(WNDCLASSEX);
wndclass.hbrBackground=hBrush;
wndclass.hCursor=NULL;//光标
//因为上面的那个LoadCUrsor是需要字符串,但是那个IDC_CURSOR1是一个整型数字,所以 需要用那个宏给转定义一下
wndclass.hIcon=NULL;//窗口图标
wndclass.hIconSm=NULL;//窗口左上的图标
wndclass.hInstance=hIstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="wangchao";
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW; //2.注册
if(::RegisterClassEx(&wndclass)==FALSE)
{
::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK); return ;
}
//3.创建 HWND hWnd=::CreateWindow("wangchao","xiao_hua",WS_OVERLAPPEDWINDOW,,,,,NULL,NULL,hIstance,NULL); if(hWnd==NULL)
{
::MessageBox(NULL,"创建失败","提示",MB_OK);
return ;
}
//4.显式 ::ShowWindow(hWnd,SW_SHOW); //5.消息循环 MSG msg; while(::GetMessage(&msg,,,))
{
//第一步先翻译
::TranslateMessage(&msg);
//第二部分发
::DispatchMessageA(&msg); } ::DeleteObject(hBrush);
//================②游戏关闭 我要关闭GDI+
//这个的变量为啥是这个,看帮助文档来的
::GdiplusShutdown(uLong_ptr);
return ;
}
8)上面都是准备工作 下面才是真正的贴图了
就是在重绘那里 WM_PAINT
9)部分代码:
case WM_PAINT:
HDC hdc=::GetDC(hWnd);//还是先取得这个窗口的句柄hdc
//==================定义图形对象,
//而且这个要和我的窗口关联,因为我要往我的窗口hdc中画 Graphics graphics(hdc);//传入那个hdc,就相当于关联了
//=================加载图片,就是那个png图片的对象
Image image("time.png"); ::ReleaseDC(hWnd,hdc);//取得了 就得释放这个取得的hdc
break;
那个time.png图片添加步骤
①在网上下载图片
②然后贴到下面:
然后:
但是代码报错了:
我做了修改 就好了(至于为啥要那样改 我还没弄明白 就知道那样改就对)
case WM_PAINT:
HDC hdc=::GetDC(hWnd);//还是先取得这个窗口的句柄hdc
//==================定义图形对象,
//而且这个要和我的窗口关联,因为我要往我的窗口hdc中画 Graphics graphics(hdc);//传入那个hdc,就相当于关联了
//=================加载图片,就是那个png图片的对象
Image image(L"time.png"); ::ReleaseDC(hWnd,hdc);//取得了 就得释放这个取得的hdc
break;
10)结果展示:
11)总目录结果展示:
12)总代码展示:
#include<Windows.h>
#include<gdiplus.h>//GDI+的头文件
using namespace std;
using namespace Gdiplus;//GDI+的命名空间 #pragma comment(lib,"gdiplus.lib")//加载GDI+的库,去导入一个库 //这个叫 窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE://点那个×,窗口关闭
::PostQuitMessage();//消息推出
break;
case WM_PAINT:
HDC hdc=::GetDC(hWnd);//还是先取得这个窗口的句柄hdc
//==================定义图形对象,
//而且这个要和我的窗口关联,因为我要往我的窗口hdc中画 Graphics graphics(hdc);//传入那个hdc,就相当于关联了 //=================加载图片,就是那个png图片的对象
Image image(L"time.png");//L,把字符串转化成宽字符集 //==================加载完后 要进行贴图了
graphics.DrawImage(&image,,);//
::ReleaseDC(hWnd,hdc);//取得了 就得释放这个取得的hdc
break; }
return ::DefWindowProc( hWnd, uMsg, wParam, lParam);
} int CALLBACK WinMain(HINSTANCE hIstance,
HINSTANCE hPreInstance,
LPSTR pCmdLine,
int nCmdShow)
{ //============①要去调用一个开始去做GDI+操作的那一个函数============
ULONG_PTR uLong_ptr;
GdiplusStartupInput gdiplusStartupInput;
::GdiplusStartup(&uLong_ptr,&gdiplusStartupInput,NULL); HBRUSH hBrush=::CreateSolidBrush(RGB(,,)); //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
WNDCLASSEX wndclass;
wndclass.cbClsExtra=;
wndclass.cbWndExtra=;//这两个是确定是否要分配额外的空间
wndclass.cbSize=sizeof(WNDCLASSEX);
wndclass.hbrBackground=hBrush;
wndclass.hCursor=NULL;//光标
//因为上面的那个LoadCUrsor是需要字符串,但是那个IDC_CURSOR1是一个整型数字,所以 需要用那个宏给转定义一下
wndclass.hIcon=NULL;//窗口图标
wndclass.hIconSm=NULL;//窗口左上的图标
wndclass.hInstance=hIstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="wangchao";
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW; //2.注册
if(::RegisterClassEx(&wndclass)==FALSE)
{
::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK); return ;
}
//3.创建 HWND hWnd=::CreateWindow("wangchao","xiao_hua",WS_OVERLAPPEDWINDOW,,,,,NULL,NULL,hIstance,NULL); if(hWnd==NULL)
{
::MessageBox(NULL,"创建失败","提示",MB_OK);
return ;
}
//4.显式 ::ShowWindow(hWnd,SW_SHOW); //5.消息循环 MSG msg; while(::GetMessage(&msg,,,))
{
//第一步先翻译
::TranslateMessage(&msg);
//第二部分发
::DispatchMessageA(&msg); } ::DeleteObject(hBrush);
//================②游戏关闭 我要关闭GDI+
//这个的变量为啥是这个,看帮助文档来的
::GdiplusShutdown(uLong_ptr);
return ;
}
14)载入png图片的更多相关文章
- Unity3d载入外部图片文件
unity里的图片在生成时会压缩成资源文件,有时客户想自己放一些图片用unity显示,就必须载入外部图片. 大体思路:用Application.streamingAssetsPath或Applicat ...
- UWP应用载入SVG图片的兼容性方案
原文 UWP应用载入SVG图片的兼容性方案 新版本<纸书科学计算器>的更新点之一,就是优化了表达式的显示方式.在旧版本中,表达式里的符号是用png图片显示的,当用户放大看的时候会发现一些锯 ...
- ios启动载入启动图片
版本判断: 1.首先你要知道这个键值对的key:id key = (id)kCFBundleVersionKey; 2.同过本地的NSBundle取得当前的版本号. 3.在沙盒中取得对应的版本号. ...
- 14种网页图片和文字特效的jQuery插件代码
1.网页图片3d旋转jQuery代码 演示和下载地址 2.存css3实现的tabl选项卡代码 演示和下载地址 3.jQuery标签旋转代码 演示和下载地址 4.鼠标悬浮的图片选项卡代码 演示和下载地址 ...
- StaggeredGridView+universal-image-loader载入网路图片实现瀑布流
StaggeredGridView 开源lib https://github.com/maurycyw/StaggeredGridView 文章demo下载地址 http://download.c ...
- Eclipse rap 富客户端开发总结(14) :rap 图片、数据缓存处理
一.概述 在进行了 rap 的基本学习之后,您对 rap 的理解是否进入了更高的一个层次呢,个人觉得,对学习 rap 的人来说,进行 rap 的学习是一个探索的过程,在编程中不断的对其进行理解和分析, ...
- MFC载入JPG图片
## 1.定义画图函数 HRESULT CIPCamDlg::draw(char *lpImageFile, HWND hWnd, int nScrWidth, int nScrHeight) { H ...
- 14.移动端图片浏览组件 react-wx-images-viewer
安装 npm install --save react-wx-images-viewer 使用 import WxImageViewer from 'react-wx-images-viewer'; ...
- 在html页面中利用ftp访问协议格式载入服务器图片
访问格式为:ftp://用户名:密码@服务器ip:服务器端口/具体文件路径 如下所示: <img src="ftp://lxj:123@127.0.0.1:21/IMG_2013051 ...
随机推荐
- nodejs学习笔记(一):centos7安装node环境
由于windows环境安装nodejs只需要访问官方网站下载压缩包,解压即可. 首先检查自己是否安装==wget==,已安装可以跳过这步,未安装则需要先安装: linux yum install -y ...
- 164-PHP 文本替换函数str_replace(五)
<?php $str='Hello world!'; //定义源字符串 $search=array('Hello','world','!'); //定义将被替换的字符数组 $replace=ar ...
- 097-PHP循环使用next取数组元素二
<?php function return_item($arr, $num = 0) { //定义函数 if ($num < 0) { end($arr); //将数组指针指向最后一个元素 ...
- 在Windows中安装vim
这篇文章主要教大家如何在Windows系统下安装最好用的编辑器VIM 来自百度百科的介绍: Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性. VIM ...
- Spring 事件(2)- 自定义事件
Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...
- css渐变实现
body{ width: 100%; height: 100%; overflow: hidden; } *{ margin: 0px; padding: 0px; font-size: 0px; } ...
- js 琐碎
1.setTimeout() .setInterval() setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式.(即n毫秒后执行一次) setTimeout(code,n) set ...
- POJ 2586:Y2K Accounting Bug
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11297 Accepted: 56 ...
- 用Python复制文件的9个方法(转)
转自:https://zhuanlan.zhihu.com/p/35725217 用Python复制文件的9个方法 Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 sh ...
- comparable and comparator 比较
转:http://www.yingjiesheng.com/job-002-393-132.html 一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Com ...