窗口重绘笔记

窗口的重绘
在这里插入图片描述

静态指针的初始化语法
在这里插入图片描述

否则报错
在这里插入图片描述

EDIT 控件多行显示
在这里插入图片描述

绘制png格式的透明背景图片
Step1: 在文件stdafx.h 中
在这里插入图片描述

#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib,“gdiplus.lib”)
窗口头文件中 声明
在这里插入图片描述

ULONG_PTR m_gdiplusToken;
Image *image;
Image *image2;

Step2 窗口的初始化函数中
在这里插入图片描述

Gdiplus::GdiplusStartupInput gdiplusStartupInput;//启动时初始化gdi+
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
image = Image::FromFile(_T(“AshCharset.PNG”)); //图片和路径自己换
image2 = Image::FromFile(_T(“BattleBG1.png”)); //图片和路径自己换

Step3 在onpaint 函数中
在这里插入图片描述

CPaintDC DC(this);
//通过设备描述表句柄实例化一个 gdi+ Graphics 类成员
Graphics graphics(DC.m_hDC);
//在 x:10 y:10 的位置输出图片
for (int i = 0; i < 10;i++)
{
for (int j = 0; j < 10; j++)
{
graphics.DrawImage(image2, 150i, 150j);
}
}

	graphics.DrawImage(image, 10, 10);
	CDialogEx::OnPaint();

Step4:在窗口撤销时 释放gdi

在这里插入图片描述

BOOL C图片粘贴Dlg::DestroyWindow()
{
// TODO: 在此添加专用代码和/或调用基类
Gdiplus::GdiplusShutdown(m_gdiplusToken); //在程序终止时释放gdi+
return CDialogEx::DestroyWindow();
}

消息发送变量

在这里插入图片描述

关于用gdi 双缓冲绘图
http://www.cnblogs.com/java20130723/p/3211349.html
onpaint函数
在这里插入图片描述

Step1:
在这里插入图片描述

CDC m_cacheDC; //缓冲DC
CBitmap m_cacheCBitmap;//缓冲位图

Step2

在这里插入图片描述

//创建缓冲DC  
	m_cacheDC.CreateCompatibleDC(NULL);
	m_cacheCBitmap.CreateCompatibleBitmap(cDC, m_client.Width(), m_client.Height());
	m_cacheDC.SelectObject(&m_cacheCBitmap);

step3
在这里插入图片描述

备注这里的 m_bg是自己定义的 类;
把DC传过去,就可以绘图了

//贴背景,现在贴图就是贴在缓冲DC:m_cache中了
my.myDraw(m_cacheDC, m_client);

Step4
在这里插入图片描述

cDC->BitBlt(0, 0, m_client.Width(), m_client.Height(), &m_cacheDC, 0, 0, SRCCOPY);

step5
在这里插入图片描述

//在绘制完图后,使窗口区有效
ValidateRect(&m_client);
//释放缓冲DC
m_cacheDC.DeleteDC();
//释放对象
m_cacheCBitmap.DeleteObject();
//释放窗口DC
ReleaseDC(cDC);

Step6 在自己类里面写绘制过程,Graphics 的DrawImage()函数,是一个多重载函数。
在这里插入图片描述
在这里插入图片描述

void huahua::myDraw(CDC &dc, CRect client)
{

Image *image = Image::FromFile(_T("ground.png")); //图片和路径自己换
Graphics graphics(dc);


for (int i = 0; i < 20; i++)
{
	for (int j = 0; j < 20; j++)
	{
		//绘制墙壁
		graphics.DrawImage(image, j*LD , i*LD , 32, 32);

	}
}
DeleteObject(image);

}

背景图片添加方法

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值