Witam. Zacząłem ostatnio przygodę z winAPI i robię różne projekty jako formę ćwiczenia, np: bitmapa w oknie, tekst w oknie, próbowałem audio w oknie ale coś nie wyszło, fullscreen w opengl. Dziś zrobiłem przy pomocy googla fullscreena w winAPI oraz wstawiłem do niego bitmapę. Chciałbym aby ktoś sprawdził mi kod, czy w dobre miejsca i czy dobrze wstawiłem kod od bitmapy i fullscreena, prosiłbym o ewentualne poprawki oraz informację w poście że coś tam zmieniliście. To jedna sprawa, a druga to taka, że chciałbym tę bitmapę jako tło na cały ekran (fullscreen). Szukałem na google ale nie ma nic o powiększaniu rozmiaru bitmapy. Za pomoc będę bardzo wdzięczny.
#include <windows.h>
#pragma comment(lib, "libgdi32.a")
static TCHAR lpszAppName[] = TEXT( "API Windows" );
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_KEYDOWN:
switch (wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps; // deklaracja struktury
HDC hdc = BeginPaint (hWnd, &ps);
HBITMAP hbmObraz;
hbmObraz =( HBITMAP ) LoadImage( NULL, "s.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
HDC hdcNowy = CreateCompatibleDC(NULL);
SelectObject( hdcNowy, hbmObraz );
BITMAP bmInfo;
GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo );
//HDC hdc = GetDC( hWnd );
BitBlt( hdc, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY );
ReleaseDC( hWnd, hdc );
EndPaint (hWnd, &ps); // zwalniamy hdc
}
break;
default:
return (DefWindowProc(hWnd, uMsg, wParam, lParam));
}
return(0L);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
WNDCLASS wndclass;
HWND hWnd;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = MainWndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = lpszAppName;
if(RegisterClass(&wndclass) == 0)
return FALSE;
int width = 0;
int height = 0;
RECT rect;
GetWindowRect(GetDesktopWindow(), &rect);
hWnd = CreateWindow(
lpszAppName, lpszAppName,
WS_POPUP | SW_SHOWMAXIMIZED,
width, height, rect.right, rect.bottom,
NULL, NULL, hInstance, NULL);
if(hWnd == NULL)
return FALSE;
DEVMODE devmode;
ZeroMemory(&devmode,sizeof(DEVMODE));
devmode.dmSize=sizeof(DEVMODE);
devmode.dmPelsWidth=rect.right;
devmode.dmPelsHeight=rect.bottom;
devmode.dmBitsPerPel=32;
devmode.dmFields= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
ChangeDisplaySettings(&devmode, CDS_FULLSCREEN);
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
HBITMAP hbmObraz;
hbmObraz =( HBITMAP ) LoadImage( NULL, "s.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
HDC hdcNowy = CreateCompatibleDC(NULL);
SelectObject( hdcNowy, hbmObraz );
BITMAP bmInfo;
GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo );
HDC hdc = GetDC( hWnd );
BitBlt( hdc, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY );
ReleaseDC( hWnd, hdc );
}
return msg.wParam;
}