Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

nie laduje bitmapy

Ostatnio zmodyfikowano 2017-04-22 03:02
Autor Wiadomość
kerlan
Temat założony przez niniejszego użytkownika
nie laduje bitmapy
» 2017-04-14 15:48:43
proba wczytania pliku bmp powoduje blad  przy
LPSTR NazwaKlasy = "Klasa Okienka";

kod:
C/C++
#include <windows.h>
MSG Komunikat;
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )

{
    LPSTR NazwaKlasy = "Klasa Okienka";
   
    WNDCLASSEX wc;
   
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszMenuName = NULL;
    wc.lpszClassName = NazwaKlasy;
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
   
    // ladowanie pliku bmp
    HBITMAP hbmObraz;
    hbmObraz =( HBITMAP ) LoadImage( NULL, "C:\\Users\\angela\\Pictures\\memu.bmp", IMAGE_BITMAP, 800, 600, LR_LOADFROMFILE );
    HDC hdcNowy = CreateCompatibleDC( NULL );
    SelectObject( hdcNowy, hbmObraz );
   
    HWND hwnd;
   
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL );
    HWND g_hPrzycisk;
    g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Nasz przycisk", WS_CHILD | WS_VISIBLE,
    100, 100, 150, 30, hwnd, NULL, hInstance, NULL );
   
    if( hwnd == NULL )
    {
        MessageBox( NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
   
    return Komunikat.wParam;
   
    return 0;
   
}
proba wczytania pliku powoduje blad przy
LPSTR NazwaKlasy = "Klasa Okienka";
P-160124
karambaHZP
» 2017-04-14 21:26:57
Na początek wklej treść błędów.
P-160133
kerlan
Temat założony przez niniejszego użytkownika
» 2017-04-15 10:09:13
C/C++
In function 'int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)':
50 21
[ Warning ] deprecated conversion from string constant to 'LPSTR {aka char*}'[ - Wwrite - strings ]
C:\U sers\angela\AppData\Local\Temp\ccKoWcri.o BezNazwy2.cpp:(.text + 0x596 )
    : undefined reference to ` _imp__CreateCompatibleDC @ 4 ' C:\U sers\angela\AppData\Local\Temp\ccKoWcri.o BezNazwy2.cpp
    :(.text + 0x5b7 )
    : undefined reference to ` _imp__SelectObject @ 8 ' C:\U sers\angela\AppData\Local\Temp\ccKoWcri.o BezNazwy2.cpp
    :(.text + 0x5d9 )
    : undefined reference to ` _imp__GetObjectA @ 12 ' C:\U sers\angela\AppData\Local\Temp\ccKoWcri.o BezNazwy2.cpp
    :(.text + 0x642 )
    : undefined reference to ` _imp__BitBlt @ 36 ' C:\U sers\angela\Documents\collect2.exe[ Error ] ld returned 1 exit status
P-160141
j23
» 2017-04-15 10:21:25
Dodaj bibliotekę gdi32.
P-160142
kerlan
Temat założony przez niniejszego użytkownika
» 2017-04-15 10:50:39
dodalem. blad wywala dalej. mam rozumiec ze mam sie obsluzyc wingdi zamiast starym kodem?
P-160143
karambaHZP
» 2017-04-15 11:22:39
P-160145
TobiPL
» 2017-04-22 03:02:06
Nie za bardzo rozumiem te twoje błędy... ale przynajmniej wyczytałem :

: undefined reference to ` _imp__SelectObject
: undefined reference to ` _imp__GetObjectA
: undefined reference to ` _imp__BitBlt


nie wiem ja tam nie mam za często problemów może dlatego że wszystko robię po swojemu...
ale wydaje mi się że może ci pomóc coś takiego

Settings -> Compiler -> Linker Settings -> Other Linker Options

i powpisuj tam:
-static
-static-libgcc
-static-libstdc++
-lgdi32

/////////////////////////////////////////////////////////////////////

HDC hdc = CreateCompatibleDC(NULL); // hadecek
HBITMAP Neko = (HBITMAP)LoadImage(NULL, _T("Neko.bmp") ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SelectObject(hdc, Neko);            // Neko to takie fajne koto dziewczyny...

BitBlt(hdcek,0,0,szyrokosc ubrazka,wysukusc obrazka,selekterek,0,0,SRCCOPY);




/////////////////////////////////////////////////////////////////////

chcesz to skopiuj tego koda i sprawdz czy ci działą...
przynajmniej JA bym to tak wlasnie napisał...

/////////////////////////////////////////////////////////////////////

    #define _WIN32_WINNT 0x0500
#include <windows.h>
#include <tchar.h>
#include <fstream>



void rysuj(char* plik)
{
HDC cons = GetDC(HWND_DESKTOP);
HDC hdc = CreateCompatibleDC(NULL);
    POINT qbmp;

FILE* f = fopen(plik, "rb");
unsigned char info[54];
fread(info, sizeof(unsigned char), 54, f);
qbmp.x = *(int*)&info[18];
qbmp.y = *(int*)&info[22];

int pxsize=((GetSystemMetrics(SM_CXSCREEN)/2)-(qbmp.x/2));
int pysize=((GetSystemMetrics(SM_CYSCREEN)/2)-(qbmp.y/2));

HBITMAP cross = (HBITMAP)LoadImage(NULL, _T(plik) ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SelectObject(hdc, cross);
BitBlt(cons,pxsize,pysize,qbmp.x,qbmp.y,hdc,0,0,SRCCOPY);
    ReleaseDC(HWND_DESKTOP,cons);
}




int main()
{
rysuj("Iki.bmp");
    while (!GetAsyncKeyState(27));

return 0;
}



hdc cons; dlatego że początkowo miało się to odpalać w konsoli... tzn. rysować obrazek
na oknie konsoli... jeśli cwolisz narysowane na konsoli ( bo na pulpicie moze zostać odświerzone )

    HWND myconsole = GetConsoleWindow();
    HDC cons = GetDC(myconsole);

tylko wtedy musiałbyś nieco zmienić kod
BitBlt(cons,0,0,qbmp.x,qbmp.y,hdc,0,0,SRCCOPY);

Oryginał:
BitBlt(cons,pxsize,pysize,qbmp.x,qbmp.y,hdc,0,0,SRCCOPY);

bo w pxsize jest pozycja wyśrodkowanego obiektu...

czyli pobrana szerokość ekranu dzielona na 2 - szerokość obiektu dzienona na dwa...




ale to sam sobie ogarnij już...
może pomogłem może nie xD ale nieco czasu na to zmarnowałęm :D...
P-160346
« 1 »
  Strona 1 z 1