Problem z wyswietleniem BMP w winapi

0

Ok mamnadzieje ze tutaj znajde kogos kto mi pomoze,
probuje wyswietlic bmp w programie
kod mniej wiecej wyglada tak:

HBITMAP mItem=(HBITMAP)LoadImage( hprogram ,"m.bmp",IMAGE_BITMAP, item[0].sizeX,item[0].sizeY,LR_LOADFROMFILE);
 hgdi=SelectObject(dds_hdc,mItem);	
BitBlt(dds_hdc,item[0].marginX,item[0].marginY,item[0].sizeX-1,item[0].sizeY-1,dds_hdc,0,0,SRCCOPY);

i teraz zamiast wyswietlic mi cokolwiek otrzymuje prostokat o wymiarach bitmapy i kolorze tla
czy to moze byc zwiazane z tym ze "zgubilem" uchwyt do programu hprogram mam uzywajac funkcji hprogram = (HINSTANCE)GetModuleHandle(NULL);?
ale okno jest tworzone moge rysowac pisac ae nie moge wyswietlic obrazkow
pomocy

0

Ten kod może nie zadziałać w przypadku gdy użyjesz Visual Studio, inne znane mi kompilatory C++ tolerują użycie funkcji LoadImage do wczytania pliku z dysku

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HBITMAP hBmp = (HBITMAP)LoadImage(NULL,"bitmap.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    static RECT WndSize;
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        case WM_SIZE:
        {
            GetClientRect(hwnd,&WndSize);
        }
        break;
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd,&ps);

            HDC mem = CreateCompatibleDC(hdc);

            SelectObject(mem,hBmp);

            BitBlt(hdc,0,0,WndSize.right,WndSize.bottom,mem,0,0,SRCCOPY);

            DeleteDC(mem);

            EndPaint(hwnd,&ps);
        }
        break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
0

A co ma do tego Visual skoro to zewnętrzna funkcja? [glowa]

0

Kiedyś pisałem w Borlandzie i z powodzeniem używałem funkcji LoadImage, jednakże w VS 2000 bodajże natrafiłem na pewien problem, chociaż poprawnie użyłem tej funkcji, i sprawdziłem czy parametry są poprawnie wpisane, plik znajduje się w podanej lokalizacji i ma tą samą nazwę, to jednak nie działała.

Teraz sprawdzając czy ten problem istnieje stwierdzam, że przynajmniej w VS 2005 i VS 2008 funkcja działa poprawnie, i tak wiem że to jest funkcja zewnętrzna i dlatego długo nie mogłem wtedy znaleźć przyczyny błędu, więc z góry założyłem, że coś musi być nie tak z funkcją LoadImage

0

Przy odpalaniu pod IDE bieżący katalog programu nie musi być tym z execiem, jakbyś to uwzględnił - działałoby poprawnie...

0
deus napisał(a)

Przy odpalaniu pod IDE bieżący katalog programu nie musi być tym z execiem

W Visualu ścieżka uruchomieniowa domyślnie jest katalogiem projektu ($(SolutionDir)).

// tja, zgadza się, pisałem ogólnie o IDE, nie tylko V. - deus

0

autorze na początek z łaski swojej powinieneś sprawdzić co zwróciło LoadImage()

1 użytkowników online, w tym zalogowanych: 0, gości: 1