Skocz do zawartości

Ładowanie Bitmap w Dialog Box


Recommended Posts

Napisano

Czy ładowanie Bitmap do Dialog Boxa różni sie czymś od ładowania ich normalnie. A tak w ogóle czy może mi ktos powiedzieć co jest nie tak jeśli kompiluje program w którył ładuję bitmapę, nie ma żadnych błędów ale po uruchomienie aplikacji nie pokazuje mi sie obrazek.

Pisze pod Dev C++ 4

Napisano

Resource:

BMP_BITMAPA                  BITMAP  DISCARDABLE  "C:/Dokumenty/Moje dokumenty/Programowanie/Moje/Tab Control/foto.bmp"

Zmienne

PAINTSTRUCT ps; // struktura do rysowania
RECT rc;
HBITMAP hBitmap;
BITMAP  bitmap;

Kod:

      case WM_CREATE:

          hBitmap = LoadBitmap (hInstance, TEXT ("BMP_BITMAPA")) ;
          GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;
          return 0;

      case WM_PAINT:

          hdc = BeginPaint (hwnd, &ps) ;
          hdcMem = CreateCompatibleDC (hdc) ;
          SelectObject (hdcMem, hBitmap) ;
          BitBlt (hdc, 90, 0, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY);
          SetRect(&rc, 0,90, 180,120);
          SetTextColor (hdc, RGB(12, 255, 78));
          DrawText(hdc, "Wyświetlany text", -1, &rc, DT_CENTER);
          DeleteDC (hdcMem) ;
          EndPaint (hwnd, &ps) ;
          return 0;
        break;

To chyba wszystko co potrzebne

Napisano

Jeśli chodzi o kod który pokazałeś to wydaje mi się, że ładowanie bitmapy powinieś obłuzyć w głównej funkcji WinMain (chyba miałem kiedyś taki problem..hyhy), albo w WinMain przekaż po prostu globalnemu uchytowi programu hInstance, uchyt który nadaje funkcja WinMain.
Coś mi się zdaje że nazwałeś je identycznie.

czyli

::hInstance = hInstance ;

i możesz ładować obrazki w każdym miejscu programu (no prawie)
;)

Jednak jeśli chcesz wyświetlać jakąś bitmapę to polecam zwykłą kontrolkę STATIC w której możesz łatwo to zrobić.
Przykładowy kod:

CreateWindow("STATIC", "nazwa_zasobu", WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, 0, 0, hwnd, (HMENU) 100, hInstance, 0) ;

Jak nadasz staticowi falge SS_BITMAP to będzie on wyświetla bitmapę którą masz w zasobach (jest również SS_ICON - ikona). Nazwę podajesz jako zwykły tekst.
Flaga SS_REALSIZEIMEGE powoduje że static automatycznie zmieni swoje rozmiary wyświetlając cały obrazek...
...i to tyle...

Pozdrawiam...

Napisano

A tekst który wyświetlasz pojawia się??

Bo jeśli tak to jest błąd przy ładowaniu bitmapy, czyli wg mnie źle podany hInstance...
A jak się tekst nie pojawia to już nie wiem. Sprawdzałem twój kod w Dev 4 i napis się wyświetlał, potem załadowałem bitmapę w WinMain (albo można dać (::hInstance = hInstance) i wszystko grało.

Pozdro

Napisano

Jeżeli to DialogBox, to obsłuż komunikat WM_INITDIALOG zamiast WM_CREATE i tam wczytaj bitmape. Nie jestem pewien, ale wydaje mi się, że DialogBoxy nie otrzymują komunikatu WM_CREATE...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...