记录我的Windows编程(三)GDI+贴张图片_大鬼是个程序员的博客-程序员秘密

技术标签: c++  visual studio 2010  windows编程实例  windows  

上次我用GDI成功贴图,但是比较可惜的是只能用Bitblt贴bmp图像,这种bmp的图像有很多缺点,比如比较大,不能透明等等。

现在我们可以用GDI+来解决这个问题,比起BMP图像,我更喜欢png这种格式的图像,这种压缩的图像内存小,无损压缩,而且有透明度。

想使用GDI+,就要先引入GDI+。

以下是GDI+绘图的核心内容:

#-----------------------------------------------核心内容---------------------------------------------#
#include <GdiPlus.h>//引入gdi+头文件
#pragma comment(lib, "Gdiplus.lib")//导入GDI+的库 
using namespace Gdiplus;//名字空间
ULONG_PTR gdiplusToken; 
GdiplusStartupInput gdiplusStartupInput;  //定两个变量
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);//开始使用GDI+
Graphics mygraphics(GetDC(hWnd));//获取设备
mygraphics.DrawImage(&myImage,100,100);//调用drawimage绘图
GdiplusShutdown(gdiplusToken); //结束使用GDI+
#-----------------------------------------------核心内容-----------------------------------------------#
然后在我们上次得到的代码中添加这些内容,就会变成下面这样:


#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <GdiPlus.h>//引入gdi+头文件

#pragma comment(lib, "Gdiplus.lib")//导入GDI+的库 
using namespace std;
using namespace Gdiplus;
ULONG_PTR gdiplusToken;  
GdiplusStartupInput gdiplusStartupInput;  


//1.设计一个窗口类
//2.注册窗口类
//3.创建窗口
//4.显示及更新窗口
//5.消息循环
//6.窗口函数

static TCHAR szWindowClass[] = _T("win32app");
static TCHAR szTitle[] = _T("测试程序");
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

//设计一个窗口类
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.style          = CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc    = WndProc;
	wcex.cbClsExtra     = 0;
	wcex.cbWndExtra     = 0;
	wcex.hInstance      = hInstance;
	wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
	wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName   = NULL;
	wcex.lpszClassName  = szWindowClass;
	wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));


	hInst=hInstance;//hinstance赋值全局变量
	

//注册窗口类
	if (!RegisterClassEx(&wcex))
	{
		MessageBox(NULL,_T("Call to RegisterClassEx failed!"),_T("Win32 Guided Tour"),NULL);
		return 1;
	}

//创建窗口
	HWND hWnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,1024, 768,NULL,NULL,hInstance,NULL);

//显示及更新窗口
	ShowWindow(hWnd,nCmdShow);
	UpdateWindow(hWnd);

//消息循环
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return (int) msg.wParam;

	

}

//消息处理函数

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);//开始使用GDI+

	Graphics mygraphics(GetDC(hWnd));//获取设备
	PAINTSTRUCT ps;
	HDC hdc;
	
	switch (message)
	{
		case WM_PAINT:
		{
			hdc = BeginPaint(hWnd, &ps); //开始使用GDI
	
			Image myImage(L"images\\1_01.png");//读取位置
			mygraphics.DrawImage(&myImage1,100,100);

			EndPaint(hWnd, &ps);//结束使用GDI
			return 0;
		}
		case WM_DESTROY:
		{	
			PostQuitMessage(0);
			break;
		}
		default:
		{
			return DefWindowProc(hWnd, message, wParam, lParam);
			break;
		}
	}

	GdiplusShutdown(gdiplusToken); //结束使用GDI+
	return 0;
}

把1_01.png放在image文件夹下面,可以自己创建一个,在你的程序集中创建,这样可以使用相对路径,你的程序包可以移动到其他位置也能显示图片了。

调试运行:


好了,是不是比GDI更省事呢,不过要注意的就是这里image使用的路径必须要用w_char的形式,不要用char数组,所以前面要加上L“”,这种东西如果明白不了,要多看看字符集的内容然后就能随心所欲的转换了。



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32084729/article/details/69382178

智能推荐

Intellij Idea 快捷键_weixin_30420305的博客-程序员秘密

Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L 格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如get,set方法,构造函数等)Ctrl+E或者Alt+Shift+C 最近更改的代码Ctrl+R 替换文本Ctrl+F 查找文本Ctrl+Shift+Space 自动补全代码Ctrl+空格 代码提示...

耕作方式对微生物群落的影响_fox387的博客-程序员秘密

Cropping practices manipulate abundance patterns of root and soil microbiome members paving the way to smart farming C:普通耕作    O:有机耕作NT:免耕    RT:少耕    IT:密集耕作C-IT   C-NT   O-IT   O-RT Hartman et al. M...

ubuntu18配置opencv 带有opencv_contrib_邱巨宝的博客-程序员秘密

整体安装参考博客第一个坑:~/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:673:20: fatal error: boostdesc_bgm.i: No such file or directory网络差,下载失败。解决方法:自行下载后拷贝到该目录。下载链接:https://files.cnblogs.com/files/a...

公关最花心,程序员最专情,项目经理X生活次数最多?_首席数据师的博客-程序员秘密

工作与生活互相渗透,他们在恋爱中呈现着不同的特点——公关恋爱次数最多、程序员恋爱时间最长、项目经理吵架频次与性生活频次双高、程序员最爱买礼物、公关最爱秀恩爱…… 需要大数据资料的加群:834325294  ...

使用 frida+dexdump对apk脱壳_埃菲尔没有塔尖的博客-程序员秘密

1.发展背景转载注明出处:APP 加固发展到现在已经好几代了,从整体加固到代码抽取到虚拟机保护,加固和脱壳的方案也逐渐趋于稳定。随着保护越来越强,脱壳机们也变得越来越费劲,繁琐。但是毕竟道高一尺,魔高一丈,市面上有很多手段可以进行脱壳操作今天介绍的是使用Frida的一个脚本来dump apk的Dex。2.脱壳原理得益于FRIDA, 在 PC上面进行内存搜索、转储都变得十分方便,再也不需要考虑什么Xposed、什么Android开发、什么代码注入,只需要关注如何去搜索想要的东西,于是依赖一个几十行代码

随便推点

查看mysql数据库端口号_如何查看mysql的端口_Jiang_JY的博客-程序员秘密

1、win+r 然后输入cmd回车 打开命令行窗口2、输入mysql -u root -p然后输入密码打开mysql3、输入 show global variables like ‘port’;4、获取数据库端口号

Idea设置代理用Fiddler抓包https__Novice的博客-程序员秘密

背景在Idea里用OkHttp写模拟登陆,发现Fiddler抓不到https请求,这属实难受,参考了别人的博客后成功解决,防止以后忘记在这里记录一下方法。1.设置Fiddler在Fiddlerde的Options将HTTPS页的复选框都选上然后点击右侧Actions选择第二项Export Root Certificate to Desktop导出证书到桌面。2.将证书注册到jdk的路径下进入jdk路径下的\jre\lib\security目录,将桌面刚导出的的证书放到该目录下,用管理员模

ThinkPHP 批量添加数据,返回自增ID_php批量写入 自增id_憨憨_WZ的博客-程序员秘密

$data = [ ['uid' =&gt; '1', 'cid' =&gt; '1'], ['uid' =&gt; '2', 'cid' =&gt; '2'], ['uid' =&gt; '3', 'cid' =&gt; '3'], ['uid' =&gt; '4', 'cid' =&gt; '4'],];$test = Db::name('test')-&...

Spring Data JPA 设置字段默认值_spring data jpa默认值_有道无德的博客-程序员秘密

在Column注解中写入以下两个属性,为什么自己查一下文档吧,即可实现字段默认值设置,并顺带解决save方法所生成的sql语句中自动填充字段为null的问题。默认值无法更新,所以如果想在代码里修改字段默认值,你需要重新建表。 @Column(insertable = false,columnDefinition = &quot;int default 1&quot;) private Intege...

Python学习网络资源汇总_hkss的博客-程序员秘密

下面是笔者学习Python时的网络资源链接:【CSDN】毫无悬念,放前面,零散知识点学习的天堂(这马屁拖的)。【玩蛇网】【Python中国】专业学python,不多说。【官方文档】最权威的莫过于官方文档。 然后就是一些网站的视频教学,就不多做介绍了。    未完待续。。。...

paddlepaddle安装后验证出现问题的解决方法_lf_龙飞的博客-程序员秘密

paddlepaddle安装后验证出现问题的解决方法链接: https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/2.0/install/pip/windows-pip.html#anchor-9图片:按照官方的验证方法,我会出现这种问题,解决方法是:打开python解释器输入 import paddle.fluid再输入 paddle.fluid.install_check.run_check(.

推荐文章

热门文章

相关标签