10. september 2003 - 15:06Der er
21 kommentarer og 1 løsning
Baggrundsbillede i applikation.
Hej, jeg sidder og leger med SDK windows kode. Altså helt uden nogen hjælp fra Visual dit og dat. Men nu mangler jeg en måde at lægge baggrundsbillede i mit program! Jeg har bare en kedelig hvis baggrund, med en grå button...
Nogle som lige kan give mig et tip til at komme videre?
Problemet er jo at jeg ved IMAGE kan bruges i Borland Builder, men jeg vil lave det fra bunden...
Her vises der et billede som baggrund på en dialog box. Det burde kunne kompilere med de fleste windows kompilere. Hvad er det for en applikation du har?
Jeg skal bare lege lidt med Windows programmering fra bunden! Så jeg startede helt fra createwindowex, showwindow, wm_command osv... Nu har jeg lavet et icon til min exe fil, så nu skulle jeg også lige bruge lidt baggrund billede på programmet! Men intet interessant! PT har det en button, som siger: JEG ER TRYKKET! (altså i tekst) og en funktion som også svarer i tekst når selve programmet trykkes, så rimelig basic, men stadig væk lidt nyt for mig!
Jeg er lidt i tvivl om dit problem er: 1) Hvordan du skal tegne et billede? 2) Hvor du skal indsætte koden til at tegne baggrunden?
Hvis 2, er svaret meget simpelt. Når du modtager den message der er defineret som WM_ERASEBKGND, skal du tegne baggrunden i et vindue. wParam er da et handle til det DC du skal bruge.
static HBITMAP hBmp; // handle of bitmap to display static HDC hdcCompat; // DC for copying bitmap
Tilføj koden til at loade bitmappen i WM_CREATE case WM_CREATE: // Load the bitmap resource. hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1)); // Create a device context (DC) to hold the bitmap. // The bitmap is copied from this DC to the window's DC // whenever it must be drawn. hdc = GetDC(hWnd); hdcCompat = CreateCompatibleDC(hdc); SelectObject(hdcCompat, hBmp); ReleaseDC(hWnd, hdc); break;
Når du får en VM_PAINT message tegner du så bitmappen case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... BitBlt(ps.hdc, 10, 10, 138, 138, hdcCompat, 1, 1, SRCCOPY); EndPaint(hWnd, &ps); break;
Og endelig, ved WM_DESTROY, sørger du for at nedlægge objekterne case WM_DESTROY: DeleteDC(hdcCompat); DeleteObject(hbmp); PostQuitMessage(0); break;
Har du prøvet debug'e for at se om variablerne initialiseres som de skal? Du bør også tilføje noget error handling som fx tjek for NULL efter LoadBitmap
Det kan du sikkert godt, men jeg har det ikke installeret, så jeg kan ikke sige dig hvordan... Du kan selvfølgelig prøve at skrive værdien ud i en messagebox...
Dit udviklingsmiljø skal vide hvor filen ligger. I VC++ vil man typisk have værdien af Resource File Name sat til $(IntDir)/$(InputName).res i sit projekt. VC++ gør selv dette som default, hvordan det gøres i BCB ved jeg ikke.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.