木木在哭泣 2022-08-01 19:43 采纳率: 93%
浏览 35
已结题

不知道图片怎么加载到屏幕,代码贴出来了

问题相关代码,请勿粘贴截图

#include<Windows.h>
#include
#include<time.h>
using namespace std;
const string APPTITLE = "Game Loop";
HWND window;
HDC device;
bool gameover = false;

void DrawBitmap(char *filename, int x, int y)
{
HBITMAP image = (HBITMAP)LoadImage(0,"c.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

BITMAP bm;
GetObject(image,sizeof(BITMAP),&bm);
HDC hdcImage = CreateCompatibleDC(device);
SelectObject(hdcImage,image);
BitBlt(
    device,
    x, y,
    bm.bmWidth, bm.bmHeight,
    hdcImage,
    0, 0,
    SRCCOPY);

DeleteDC(hdcImage);
DeleteObject((HBITMAP)image);

}
bool Game_Init()
{
srand(time(NULL));
return 1;
}

void Game_Run()
{
if (gameover==true)return;
RECT rect;
GetClientRect(window,&rect);
int x= rand() % (rect.right-rect.left);
int y = rand() % (rect.bottom-rect.top);
DrawBitmap("c.bmp",x,y);
}

void Game_End()
{
ReleaseDC(window,device);
}

LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
gameover = true;
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wc;
wc.cbSize= sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = APPTITLE.c_str();
wc.hIconSm = NULL;

return RegisterClassEx(&wc);

}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
window = CreateWindow(
APPTITLE.c_str(),
APPTITLE.c_str(),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
640,
480,
NULL,
NULL,
hInstance,
NULL);

if (window == 0) return 0;
ShowWindow(window,nCmdShow);
UpdateWindow(window);
device = GetDC(window);
return 1;

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
MyRegisterClass(hInstance);
if (!InitInstance(hInstance,nCmdShow)) return 0;
if (!Game_Init()) return 0;
while (!gameover)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Game_Run();
}
Game_End();
return msg.wParam;
}

我想要达到的结果

图片输出到屏幕上,谢谢。

  • 写回答

2条回答 默认 最新

  • 赵4老师 2022-08-01 21:43
    关注
    
    #pragma comment(lib,"user32")
    #pragma comment(lib,"gdi32")
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>
    HWND WINAPI GetConsoleWindow();
    void HideTheCursor() {
        CONSOLE_CURSOR_INFO cciCursor;
        HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
        if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
            cciCursor.bVisible = FALSE;
            SetConsoleCursorInfo(hStdOut, &cciCursor);
        }
    }
    void ShowTheCursor() {
        CONSOLE_CURSOR_INFO cciCursor;
        HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
        if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
            cciCursor.bVisible = TRUE;
            SetConsoleCursorInfo(hStdOut, &cciCursor);
        }
    }
    int main() {
        HWND  hwnd;
        HDC   hdc;
        HFONT hfont;
        HBITMAP hbm;
        HDC hdcBits;
        BITMAP bm;
    
        system("color F0");
        system("cls");
        HideTheCursor();
        hwnd  = GetConsoleWindow();
        hdc   = GetDC(hwnd);
        hbm=(HBITMAP)LoadImage(0,"C:\\Windows\\Soap Bubbles.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
        if (hbm) {
            hdcBits = CreateCompatibleDC(hdc);
            GetObject (hbm, sizeof(BITMAP), &bm);
            SelectObject(hdcBits,hbm);
            BitBlt(hdc,200,10,bm.bmWidth, bm.bmHeight,hdcBits,0,0,SRCCOPY);
            DeleteDC(hdcBits);
            DeleteObject(hbm);
        }
        hfont = CreateFont(24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
        SelectObject(hdc,hfont);
        SetTextColor(hdc,RGB(255,255,255));
        SetBkMode(hdc,TRANSPARENT);
        TextOut(hdc,210,30,"这个背景是泡泡",14);
        DeleteObject(hfont);
        ReleaseDC(hwnd,hdc);
        getch();
        system("color 07");
        system("cls");
        ShowTheCursor();
        return 0;
    }
    
    

    你的代码里BitBlt绘制图片c.bmp的内容到屏幕

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月11日
  • 已采纳回答 8月3日
  • 创建了问题 8月1日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系