鱼C论坛

 找回密码
 立即注册
查看: 564|回复: 0

窗口创建背景贴图问题求助

[复制链接]
最佳答案
0 
发表于 2018-3-10 11:17:41 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
窗口创建后想换背景,但是贴图不成功,背景是空白的,没有任何图案,程序没有显示出错
*标头头文件

#include <windows.h>
#include "resource.h"
#include <gdiplus.h>
#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;

#define CLIENTWIDTH 400
#define CLIENTHEIGHT 600

HBITMAP hBitmap;

void GameInit();  //游戏初始化
void LoadImage();//加载游戏位图
void GamePaint(HDC hdc);//界面重绘


*主程序文件

#include "标头.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
        static TCHAR szAppName[] = TEXT("MyWindows");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndclass;

        GdiplusStartupInput gdiplusStartupInput;
        ULONG_PTR           gdiplusToken;
        GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

        wndclass.style = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;

        if (!RegisterClass(&wndclass))
        {
                MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
                return 0;
        }
        int cxScreen = GetSystemMetrics(SM_CXSCREEN);
        int cyScreen = GetSystemMetrics(SM_CYSCREEN);
        RECT rc;
        rc.left = (cxScreen - CLIENTWIDTH) / 2;
        rc.top = (cyScreen - CLIENTHEIGHT) / 2;
        rc.right = rc.left + CLIENTWIDTH;
        rc.bottom = rc.top + CLIENTHEIGHT;
        AdjustWindowRect(&rc, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, FALSE);

        hwnd = CreateWindow(szAppName,
                TEXT("飞机大战"),
                WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                rc.left,
                rc.top,
                rc.right - rc.left,
                rc.bottom - rc.top,
                NULL,
                NULL,
                hInstance,
                NULL);
       
        ShowWindow(hwnd, iCmdShow);
        UpdateWindow(hwnd);

        while (GetMessage(&msg, NULL, 0, 0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        GdiplusShutdown(gdiplusToken);
    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        HDC hdc;
        PAINTSTRUCT ps;
        RECT rect;

        switch (message)
        {
        case WM_CREATE:
                GameInit();
                return 0;
        case WM_PAINT:
                hdc = BeginPaint(hwnd, &ps);
                GamePaint(hdc);
                EndPaint(hwnd, &ps);
                return 0;

        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
        }

        return DefWindowProc(hwnd, message, wParam, lParam);
}


void GameInit()
{
        LoadImage();
}
void LoadImage()
{
        Bitmap* pBmp = Bitmap::FromFile(L",\\res\\img\\first.png");
        pBmp->GetHBITMAP(NULL, &hBitmap);
        delete pBmp;
        pBmp = NULL;
}

void GamePaint(HDC hdc)
{     //创建于DC兼容的内存DC
        HDC hdcMem = CreateCompatibleDC(hdc);
        //将位图对象选进内存DC中
        SelectObject(hdcMem, hBitmap);
        //将内存中的位图贴到屏幕上
        BitBlt(hdc, 0, 0, CLIENTWIDTH, CLIENTHEIGHT, hdcMem, 0, 0, SRCCOPY);
        //释放内存
        DeleteDC(hdcMem);
        //删除位图对象
        DeleteObject(hBitmap);

}
捕获.PNG
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号 )

GMT+8, 2018-7-22 07:01

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表