用vs2022C++windows窗口应用程序写一段代码,调试时显示封面界面,然后按下F1、F2、F3、F4、F5时,系统分别切换五张图片
时间: 2023-07-10 08:32:18 浏览: 108
好的,这里是一份示例代码实现:
首先,在 Visual Studio 2022 中创建一个 Windows 窗口应用程序项目(Win32 Application),然后在资源管理器中添加 5 张图片(格式可以是 bmp、jpg、png 等)。
然后,在窗口的消息处理函数中,添加键盘消息的处理代码。具体实现如下:
```cpp
#include "stdafx.h"
#include "MyApp.h"
// 定义 5 个图片资源 ID
#define IDB_IMG1 101
#define IDB_IMG2 102
#define IDB_IMG3 103
#define IDB_IMG4 104
#define IDB_IMG5 105
// 窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int nCurImg = 1; // 当前显示的图片编号
static HBITMAP hBitmaps[5] = { 0 }; // 5 个图片的句柄数组
switch (message)
{
case WM_CREATE:
// 加载 5 个图片资源并创建对应的位图句柄
hBitmaps[0] = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_IMG1));
hBitmaps[1] = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_IMG2));
hBitmaps[2] = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_IMG3));
hBitmaps[3] = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_IMG4));
hBitmaps[4] = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_IMG5));
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// 绘制当前显示的图片
HBITMAP hBitmap = hBitmaps[nCurImg - 1];
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hdcMem, hBitmap);
BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, hOldBitmap);
DeleteDC(hdcMem);
EndPaint(hWnd, &ps);
break;
}
case WM_KEYDOWN:
// 根据按键切换图片
switch (wParam)
{
case VK_F1:
nCurImg = 1;
InvalidateRect(hWnd, NULL, TRUE);
break;
case VK_F2:
nCurImg = 2;
InvalidateRect(hWnd, NULL, TRUE);
break;
case VK_F3:
nCurImg = 3;
InvalidateRect(hWnd, NULL, TRUE);
break;
case VK_F4:
nCurImg = 4;
InvalidateRect(hWnd, NULL, TRUE);
break;
case VK_F5:
nCurImg = 5;
InvalidateRect(hWnd, NULL, TRUE);
break;
}
break;
case WM_DESTROY:
// 释放位图资源
if (hBitmaps[0]) DeleteObject(hBitmaps[0]);
if (hBitmaps[1]) DeleteObject(hBitmaps[1]);
if (hBitmaps[2]) DeleteObject(hBitmaps[2]);
if (hBitmaps[3]) DeleteObject(hBitmaps[3]);
if (hBitmaps[4]) DeleteObject(hBitmaps[4]);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
```
上述代码中,`hBitmaps` 数组存储了 5 个图片的位图句柄,`nCurImg` 变量记录当前显示的图片编号。在窗口的 `WM_CREATE` 消息中,我们通过 `LoadBitmap` 函数加载了 5 个图片资源,并创建了对应的位图句柄。
在窗口的 `WM_PAINT` 消息中,我们根据当前的 `nCurImg` 变量绘制对应的图片。具体实现中,我们先通过 `CreateCompatibleDC` 函数创建一个与当前设备兼容的内存 DC,然后将需要绘制的位图选入内存 DC 中,最后调用 `BitBlt` 函数将位图绘制到窗口 DC 上。注意,在绘制完成后要调用 `DeleteDC` 函数释放内存 DC。
在窗口的 `WM_KEYDOWN` 消息中,我们根据按下的键盘按键(F1 ~ F5)切换图片。具体实现中,我们根据键盘按键对应的虚拟键码(`VK_F1` ~ `VK_F5`),修改 `nCurImg` 变量的值,并调用 `InvalidateRect` 函数触发窗口的重绘。
最后,在窗口的 `WM_DESTROY` 消息中,我们释放了 5 个位图资源。
完成上述代码后,我们在窗口的 `WM_CREATE` 消息中添加以下代码,显示程序的封面界面:
```cpp
// 在窗口创建时,显示封面界面
HBITMAP hBitmapCover = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_COVER));
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hdcMem, hBitmapCover);
BITMAP bm;
GetObject(hBitmapCover, sizeof(bm), &bm);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, hOldBitmap);
DeleteDC(hdcMem);
DeleteObject(hBitmapCover);
```
其中,`IDB_COVER` 是程序封面图片的资源 ID。在这段代码中,我们通过 `LoadBitmap` 函数加载封面图片,并将其绘制到窗口 DC 上。完成后,我们需要在窗口的 `WM_DESTROY` 消息中释放封面图片的资源。
完整的代码示例可以参考以下代码:
阅读全文