gpt4 book ai didi

c++ - 使用 CreateWindow 显示 BMP

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:13 25 4
gpt4 key购买 nike

我想在屏幕顶部显示一个标志。 Logo 是一个 bmp 文件。我制作了一个示例程序来展示完整工作代码中发生的情况:

#include <windows.h>
#include <commctrl.h>
#include <tchar.h>
#include "resource.h"

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

char szClassName[] = "BmpTestApp";

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof(WNDCLASSEX);

wincl.hIcon = NULL;
wincl.hIconSm = NULL;
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;

wincl.hbrBackground = (HBRUSH)COLOR_WINDOW;

if(!RegisterClassEx(&wincl))
return 0;

DEVMODE display;
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &display);

hwnd = CreateWindowEx(WS_OVERLAPPED, szClassName, "Bitmap Display Test", WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, HWND_DESKTOP, NULL, hThisInstance, NULL);
ShowWindow(hwnd, nCmdShow);

while(GetMessage(&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

return messages.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
HWND logo;
case WM_CREATE:
RECT hwndRect;
GetWindowRect(hwnd, &hwndRect);
int winWidth;
int winHeight;
winWidth = hwndRect.right - hwndRect.left;
winHeight = hwndRect.bottom - hwndRect.top;

HBITMAP logoImage;
logoImage = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_LOGO), IMAGE_BITMAP, winWidth - 180, winHeight - 530, LR_DEFAULTCOLOR);
logo = CreateWindow(WC_STATIC, NULL, SS_BITMAP | SS_CENTER | WS_CHILD | WS_VISIBLE, 0, 0, winWidth - 180, winHeight - 530, hwnd, NULL, NULL, NULL);
SendMessage(logo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)logoImage);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;

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

return 0;
}


// resource.rc
IDB_LOGO BITMAP "Logo.bmp"

// resource.h
#define IDB_LOGO 300

当我运行我的程序时,只有一个图像大小的框,但里面没有图像。 Logo.bmp 肯定位于我的 resource.rc 文件和所有其他项目文件所在的文件夹中。为什么不显示?谢谢。

最佳答案

您不会为您不处理的消息调用 DefWindowProc。

关于c++ - 使用 CreateWindow 显示 BMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5126714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com