negdje sam iskopao ovaj kod:
Moraš imati handler za WM_PAINT poruku u kojemu ćeš iscrtati neku bitmapu preko prozora. Ta bitmapa može biti vanjska datoteka ili embeddana u izvršnu datoteku (kao resurs)
Evo primjer:
main.c
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
void WindowPaint(HWND);
char szClassName[]="WindowsApp";
HBITMAP image=NULL;
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
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 = LoadIcon(NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
if (!RegisterClassEx(&wincl))
return 0;
hwnd=CreateWindowEx(0, szClassName, "Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL);
ShowWindow(hwnd, nFunsterStil);
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)
{
case WM_CREATE:
image=LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BACKGROUND));
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
WindowPaint(hwnd);
break;
case WM_SIZE:
InvalidateRect(hwnd, NULL, 0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
void WindowPaint(HWND hwnd)
{
PAINTSTRUCT ps;
HDC hdc, img;
BITMAP b;
hdc=BeginPaint(hwnd, &ps);
img=CreateCompatibleDC(hdc);
GetObject(image, sizeof(BITMAP), &b);
SelectObject(img, image);
StretchBlt(hdc, 0, 0, ps.rcPaint.right, ps.rcPaint.bottom,
img, 0, 0, b.bmWidth, b.bmHeight,
SRCCOPY);
EndPaint(hwnd, &ps);
return;
}
resources.h
#define IDB_BACKGROUND 100
resources.rc
#include "resource.h"
IDB_BACKGROUND BITMAP "background.bmp"
Naravno, to podrazumijeva da imaš background.bmp datoteku u folderu programa.
3. Kako mijenjat ime gumba? (pretpostavljam slično kao i za labele, samo što nemogu nigdje na netu to iskopat)
Pomoću WM_SETTEXT poruke koju šalješSendMessage funkcijom, ili izravnije putem SetWindowText funkcije.
Neka te ne zbuni ovo "window", naime sve kontrole pod Windowsima su tehnički također "prozori" iako tako ne izgledaju.
U slučaju da ti zatreba negdje handle od kontrole a ti imaš samo njen identifier, onda iskoristi GetDlgItem, a ako imaš handle a trebaš identifier onda za to imašGetDlgCtrlID


