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

[WinAPI, C++] Wyświetlanie bitmap w zależności od wciśniętego przycisku

Ostatnio zmodyfikowano 2010-06-23 16:47
Autor Wiadomość
SeaMonster131
Temat założony przez niniejszego użytkownika
[WinAPI, C++] Wyświetlanie bitmap w zależności od wciśniętego przycisku
» 2010-06-22 20:24:59
Mam puste okienko oraz 2 przyciski. Gdy nacisnę 1. przycisk to pojawia się bitmapa "jeden.bmp" o współrzędnych 100 i 100 oraz o wymiarach 10 na 10. Gdy nacisnę drugi przycisk to zamiast bitmapy "jeden.bmp" pojawia się o takich samych wymiarach i współrzędnych bitmapa "dwa.bmp". I teraz moje pytanie: jak to zrobić? :D
Używając goto jakoś bym to wykombinował, ale właśnie nie chce używać goto. A innego pomysłu nie mam... pomoże mi ktoś? :)

#edit: 100 post! :D:D
P-18252
Elaine
» 2010-06-22 20:44:07
Pseudokod:
C/C++
PierwszyPrzyciskOnClick()
{
    RysujBitmape( "jeden.bmp" );
}
DrugiPrzyciskOnClick()
{
    RysujBitmape( "dwa.bmp" );
}
Gdzie ty tu chciałeś wsadzić goto?
P-18254
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2010-06-22 21:21:31
Bo mam tak:
główna funkcja INT WINAPI WinMain(...); w której mam wyświetlanie okna oraz mam LRESULT CALLBACK WndProc(...); w której jest "obsługa" okna. Może dam kod:D
C/C++
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wPar, LPARAM lPar )
{
    HDC hdc, hdcBitmapy;
    switch( msg )
    {
    case WM_CREATE:
        //funkcja tworząca kontrolkę
        hButton = CreateWindowEx( 0, WC_BUTTON, "Cos", WS_CHILD + WS_VISIBLE, 100, 290, 80, 40, hwnd,( HMENU ) 1, * hInst, 0 );
        hButton = CreateWindowEx( 0, WC_BUTTON, "Cos2", WS_CHILD + WS_VISIBLE, 200, 390, 80, 40, hwnd,( HMENU ) 2, * hInst, 0 );
        break;
       
       
    case WM_COMMAND:
        if( wPar == 1 ) {
            // kliknięcie przyciskiem 1.
        }
        if( wPar == 2 ) {
            // kliknięcie przyciskiem 2.
        }
        break;
       
    case WM_DESTROY:
        DestroyWindow( hButton );
        DestroyWindow( hWnd );
        PostQuitMessage( 0 );
        break;
       
    case WM_PAINT:
        kon = BeginPaint( hwnd, & ps );
        hdcBitmapy = CreateCompatibleDC( kon ); //teraz musimy utworzyć kontekst pamięciowy dla bitmapy
        bitmapa =( HBITMAP ) SelectObject( hdcBitmapy, bitmapa );
        BitBlt( kon, 40, 140, 130, 130, hdcBitmapy, 0, 0, SRCCOPY );
        bitmapa =( HBITMAP ) SelectObject( hdcBitmapy, bitmapa ); //z powrotem zamieniamy bitmapy w kontekście
        DeleteDC( hdcBitmapy ); //usuwamy kontekst pamięciowy bitmapy
       
        hdcBitmapy = CreateCompatibleDC( kon );
        bitmapa2 =( HBITMAP ) SelectObject( hdcBitmapy, bitmapa2 );
        BitBlt( kon, 330, 140, 130, 130, hdcBitmapy, 0, 0, SRCCOPY );
        bitmapa2 =( HBITMAP ) SelectObject( hdcBitmapy, bitmapa2 );
        DeleteDC( hdcBitmapy );
       
        EndPaint( hwnd, & ps );
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wPar, lPar );
        break;
    }
    return 0;
}
A więc wydaje mi się że przykład @Iname tutaj nie za bardzo pasuje :D Chyba że w WM_COMMAND można dać kod za rysowanie/wyświetlanie bitmap itd... A musze to sprawdzić :D
P-18257
malan
» 2010-06-22 22:08:02
C/C++
case WM_COMMAND:
{
    switch( wParam ) // wiem.
    {
    case 1: DisplayBitmap( hwnd, "myBitmap.bmp" ); break;
    case 2: DisplayBitmap( hwnd, "myFoo.bmp" ); break;
    }
}
break;

//... ileś milionów linii kodu dalej...

//@DisplayBitmap:
void DisplayBitmap( HWND hWindow, const char * bmpName )
{
    CleanWindow( hWindow );
    DrawBitmap( hWindow, LoadBitmap( bmpName ) );
    return;
};
Czytelne? :)
P-18259
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2010-06-23 16:47:12
Czytelne, czytelne :D
Jak będę miał wolny czas to przetestuje ;)
Dzięki za pomoc
P-18272
« 1 »
  Strona 1 z 1