이전에 해 보았던 것을 싫어합니다. 무엇인가 놓치고있는 것처럼 느껴졌습니다. 그래서, C++ WinAPI에서 윈도우의 배경 이미지를 설정하려고합니다. 내가 코드 :: 블록을 사용하고C++ WINAPI 설정 창 배경 이미지가 작동하지 않습니다.
....
WNDCLASSEX wcls;
wcls.cbSize = sizeof(WNDCLASSEX);
wcls.style = CS_PARENTDC|CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
wcls.lpfnWndProc = WndProc;
wcls.cbClsExtra = 0;
wcls.cbWndExtra = 0;
wcls.hInstance = hInstance;
wcls.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(HICON));
wcls.hCursor = LoadCursor(NULL, IDC_ARROW);
wcls.hbrBackground = HBRUSH(COLOR_WINDOW + 1);
wcls.lpszClassName = L"WndClass";
wcls.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(HICON));
HWND Window = CreateWindowEx (
WS_EX_LAYERED|WS_EX_TOOLWINDOW,
wcls.lpszClassName,
L"Window Title",
WS_VISIBLE|WS_POPUP|WS_CLIPCHILDREN,
CW_USEDEFAULT,
CW_USEDEFAULT,
384,
128,
NULL,
NULL,
hInstance,
NULL
);
if (!Window) return 0;
SetLayeredWindowAttributes(
Window,
RGB(35, 35, 35),
85,
LWA_ALPHA|LWA_COLORKEY
);
SetWindowPos(
Window,
HWND_TOPMOST,
0,
0,
0,
0,
SWP_NOMOVE|SWP_NOREDRAW|SWP_NOSIZE
);
ShowWindow(Window, SW_SHOWNORMAL);
UpdateWindow(Window);
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM Wpar, LPARAM Lpar) {
HBITMAP Background = NULL;
BITMAP BgImg;
HDC DeviceContext, BgContext;
PAINTSTRUCT PaintStruct;
switch (Msg) {
case WM_PAINT:
ContextLansator = BeginPaint(hWnd, &PaintStruct);
Fundal = LoadBitmap(hInstance, MAKEINTRESOURCE(BACKGROUND));
FundalLansator = CreateCompatibleDC(DeviceContext);
SelectObject(DeviceContext, Background);
GetObject(Background, sizeof(BgImg), &BgImg);
BitBlt(DeviceContext, 0, 0, 384, 128, BgContext, 0, 0, SRCAND);
DeleteObject(Background);
DeleteDC(BgContext);
EndPaint(hWnd, &PaintStruct);
break;
.....
내 Resources.rc
#include "Resources.h"
BACKGROUND BITMAP "background.bmp"
내 Resources.h
#define BACKGROUND 200
내하여 Main.cpp. 리소스가 올바르게 포함되고 창은 시작되지만 흰색 배경 만 표시되고 이미지는 색칠되지 않습니다. WM_PAINT 메시지는 처음에 한 번 호출됩니다. BgImg에 문제가있는 것처럼 채우지 만 무엇을 모르겠습니다. 어떤 도움이 필요하다! 감사!
음, 많은 초기화되지 않은 변수를 사용하고 있습니다. –
LoadBitmap이 NULL을 반환합니다. – ali
그러면 hInstance에서 지정한 모듈에 비트 맵이 없습니다. hInstance가 올바른지, 리소스가 실제로 정수 리소스인지 확인하십시오. –