这几天写自己的小程序时遇到的问题,谁能帮忙回答下?
如果不介意的话,能将按钮怎么用也写上吧~
png要用gdi+去绘制。
不知道你这个问题是否已经解决, 如果还没有解决的话:其实加载游戏通关图片只需使用putimage函数即可,这里之所以单独作为一个标题是因为使用putimage时如果时png透明图片加载出来时还是会有背景,这里为大家提供一个可以加载png透明背景图片的算法(可以单独拷贝使用)
/*****************************
* 功能:载入PNG图并去透明部分
* 输入:
* 无
* 输出:
* 无
*****************************/
void drawAlpha(IMAGE* picture, int picture_x, int picture_y) //x为载入图片的X坐标,y为Y坐标
{
// 变量初始化
DWORD* dst = GetImageBuffer(); // GetImageBuffer()函数,用于获取绘图设备的显存指针,EASYX自带
DWORD* draw = GetImageBuffer();
DWORD* src = GetImageBuffer(picture); //获取picture的显存指针
int picture_width = picture->getwidth(); //获取picture的宽度,EASYX自带
int picture_height = picture->getheight(); //获取picture的高度,EASYX自带
int graphWidth = getwidth(); //获取绘图区的宽度,EASYX自带
int graphHeight = getheight(); //获取绘图区的高度,EASYX自带
int dstX = 0; //在显存里像素的角标
// 实现透明贴图 公式: Cp=αp*FP+(1-αp)*BP , 贝叶斯定理来进行点颜色的概率计算
for (int iy = 0; iy < picture_height; iy++)
{
for (int ix = 0; ix < picture_width; ix++)
{
int srcX = ix + iy * picture_width; //在显存里像素的角标
int sa = ((src[srcX] & 0xff000000) >> 24); //0xAArrggbb;AA是透明度
int sr = ((src[srcX] & 0xff0000) >> 16); //获取RGB里的R
int sg = ((src[srcX] & 0xff00) >> 8); //G
int sb = src[srcX] & 0xff; //B
if (ix >= 0 && ix <= graphWidth && iy >= 0 && iy <= graphHeight && dstX <= graphWidth * graphHeight)
{
dstX = (ix + picture_x) + (iy + picture_y) * graphWidth; //在显存里像素的角标
int dr = ((dst[dstX] & 0xff0000) >> 16);
int dg = ((dst[dstX] & 0xff00) >> 8);
int db = dst[dstX] & 0xff;
draw[dstX] = ((sr * sa / 255 + dr * (255 - sa) / 255) << 16) //公式: Cp=αp*FP+(1-αp)*BP ; αp=sa/255 , FP=sr , BP=dr
| ((sg * sa / 255 + dg * (255 - sa) / 255) << 8) //αp=sa/255 , FP=sg , BP=dg
| (sb * sa / 255 + db * (255 - sa) / 255); //αp=sa/255 , FP=sb , BP=db
}
}
}
}
/*****************************
* 功能:载入“恭喜通关”图片
* 输入:
* 无
* 输出:
* 无
*****************************/
void promot_over() {
setbkmode(TRANSPARENT);
drawAlpha(&images[VECTOR], 250, 130); // 载入PNG图并去透明部分
Sleep(1100);
}
到这里推箱子游戏就已经完成了,接下来就是将数据库与游戏连接起来。
我可以帮助你解决这个问题。要在win32程序中设置PNG图片作为窗口的背景,你可以按照以下步骤进行操作:
步骤1:添加所需的库和头文件 你需要包含以下头文件和库来使用PNG图片:
#include <windows.h>
#include <Commctrl.h>
#include "resource.h"
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
步骤2:在资源文件中添加PNG图片 在你的项目中的资源文件(.rc)中添加一张PNG图片,通过右键点击“资源文件” -> “添加” -> “导入”来导入你的PNG图片。
步骤3:初始化GDI+ 在窗口过程函数的开始,你需要初始化GDI+库:
ULONG_PTR gdiplusToken;
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
步骤4:加载PNG图片 在窗口过程函数的 WM_CREATE 消息中加载PNG图片并保存到一个变量中:
Gdiplus::Image* backgroundImage;
// 在 WM_CREATE 消息中加载PNG图片
case WM_CREATE:
backgroundImage = Gdiplus::Image::FromFile(L"your_image.png");
break;
步骤5:绘制背景图片 在窗口过程函数的 WM_PAINT 消息中绘制背景图片:
// 在 WM_PAINT 消息中绘制背景图片
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
Gdiplus::Graphics graphics(hdc);
graphics.DrawImage(backgroundImage, 0, 0);
EndPaint(hWnd, &ps);
}
break;
步骤6:清理工作 在窗口过程函数的 WM_DESTROY 消息中清理GDI+相关资源:
// 在 WM_DESTROY 消息中清理GDI+资源
case WM_DESTROY:
delete backgroundImage;
Gdiplus::GdiplusShutdown(gdiplusToken);
PostQuitMessage(0);
break;
这样,你就成功地将PNG图片设置为窗口的背景了。
关于使用按钮,你可以按照以下步骤进行操作:
步骤1:在资源文件中添加按钮 在资源文件(.rc)中添加一个按钮控件,例如:
BUTTON "按钮",IDC_BUTTON,10,10,50,25
步骤2:处理按钮点击事件 在窗口过程函数中添加处理按钮点击事件的代码:
// 在窗口过程函数中处理按钮点击事件
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_BUTTON:
// 按钮点击事件的处理代码
break;
}
break;
你可以在按钮点击事件的处理代码中添加具体的逻辑。
希望以上解决方案对你有帮助!