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

[Winapi] Pojawienie się bitmapy jeżeli dany warunek zostanie spełniony

Ostatnio zmodyfikowano 2011-10-17 15:15
Autor Wiadomość
Kamil9132
Temat założony przez niniejszego użytkownika
[Winapi] Pojawienie się bitmapy jeżeli dany warunek zostanie spełniony
» 2011-10-12 00:11:49
Witam
Mam taki kod:
C/C++
#include <string>
#include <windows.h>

#define IDT_TIMER1 1

LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
HWND g_hmenu;
HWND g_hstart;
WORD KulkaX = 100, KulkaY = 100;
SHORT SpeedX = 2, SpeedY = 2;
HWND g_hwnd;



HBITMAP bitmapa; //uchwyt naszej bitmapy
BITMAP info_bitmapy; //struktura inforamcyjna bitmapy



bool g_hgracc = false;




int gra( int gramenu ) {
   
   
   
    if( gramenu == 1 ) {
       
       
       
       
        g_hgracc = true;
       
       
        bool z0 = true;
       
       
        bool z2 = false;
        bool z3 = false;
        bool z4 = false;
        bool z5 = false;
       
       
        while( z0 == true ) {
           
            z0 = false;
           
           
        }
       
       
       
       
       
       
       
    }
   
    return g_hgracc;
}



void RysujKulke()
{
   
   
}


LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );









int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
   
   
   
    //wczytywanie bitmapy z dysku i pobranie informacji
    bitmapa =( HBITMAP ) LoadImage( 0, "bitmapa.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
    if( bitmapa == 0 )
    {
        MessageBox( 0, "Nie można otworzyć pliku bitmap.bmp z folderu z aplikacją", "Brak pliku", MB_ICONERROR );
        return 0; //zamkniecie programu w razie braku pliku bitmapy
    }
    GetObject( bitmapa, sizeof( BITMAP ), & info_bitmapy ); //pobieramy informacje o bitmapie, potrzebujemy jej wymiarów
   
   
   
   
    // WYPEŁNIANIE STRUKTURY
    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 );
   
    // REJESTROWANIE KLASY OKNA
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
   
    // TWORZENIE OKNA
    HWND hwnd;
   
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
    CW_USEDEFAULT, CW_USEDEFAULT, 600, 800, NULL, 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 ); // Pokaż okienko...
    UpdateWindow( hwnd );
   
   
   
   
   
   
   
   
   
    SetTimer( hwnd, // handle to main window
    IDT_TIMER1, // timer identifier
    10000, // 10-second interval
    ( TIMERPROC ) NULL );
   
    g_hstart = CreateWindowEx( 0, "BUTTON", "Rozpocznij gre", WS_CHILD | WS_VISIBLE,
    200, 50, 150, 30, hwnd, NULL, hInstance, NULL );
   
   
   
   
   
   
   
   
   
    // Pętla komunikatów
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
    return Komunikat.wParam;
   
    DeleteObject( bitmapa );
    return Komunikat.wParam;
   
   
}


// OBSŁUGA ZDARZEŃ
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
   
    HDC hdc, hdcBitmapy; //zmienne na 2 konteksty
    PAINTSTRUCT ps;
   
    switch( msg )
    {
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
       
       
       
    case WM_PAINT:
       
        if( g_hgracc == false ) {
           
            hdc = BeginPaint( hwnd, & ps ); //kontekst okna uzyskujemy w momencie odrysowywania
           
            hdcBitmapy = CreateCompatibleDC( hdc ); //teraz musimy utworzyć kontekst pamięciowy dla bitmapy
            bitmapa =( HBITMAP ) SelectObject( hdcBitmapy, bitmapa ); //zamieniamy konteksty wiążąc bitmapę z kontekstem
            //tutaj możemy przeprowadzać jakieś operacje graficzne z naszym kontekstem bitmapy
            //uwaga te operacje będą przeprowadzane co każde odświeżenie okna
            //wyświetlenie bitmapy na oknie, operacja przekopiowania
           
           
            BitBlt( hdc, 100, 200, info_bitmapy.bmWidth, info_bitmapy.bmHeight, hdcBitmapy, 0, 0, SRCCOPY );
            bitmapa =( HBITMAP ) SelectObject( hdcBitmapy, bitmapa ); //z powrotem zamieniamy bitmapy w kontekście
           
            DeleteDC( hdcBitmapy ); //usuwamy kontekst pamięciowy bitmapy
           
           
            HDC hdcOkno;
            hdcOkno = GetDC( hwnd );
           
            POINT stary_punkt;
            MoveToEx( hdcOkno, 100, 100, & stary_punkt );
            if( g_hgracc == true ) {
                LineTo( hdcOkno, 210, 100 );
            }
           
            ReleaseDC( hwnd, hdcOkno ); }
        EndPaint( hwnd, & ps );
        break;
       
       
       
       
       
       
       
       
       
       
       
    case WM_TIMER:
       
        if( wParam == IDT_TIMER1 )
        {
           
            // process the 10-second timer
           
            //       RysujKulke();
           
            return 0;
           
        } break;
       
    case WM_COMMAND:
        if(( HWND ) lParam == g_hmenu ) {
            MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION ); }
       
       
        if(( HWND ) lParam == g_hstart ) {
            MessageBox( hwnd, "Nacisnąłeś start!", "Ha!", MB_ICONINFORMATION );
            gra( 1 );
            if( g_hgracc == true ) {
               
               
                DestroyWindow( g_hstart );
               
                g_hmenu = CreateWindowEx( 0, "BUTTON", "Menu", WS_CHILD | WS_VISIBLE,
                10, 10, 150, 30, hwnd, NULL,( HINSTANCE ) GetWindowLong( hwnd, GWL_HINSTANCE ), NULL );
               
                CreateWindowEx( 0, "BUTTON", "Nowy guzik", WS_CHILD | WS_VISIBLE,
                300, 50, 150, 30, hwnd, NULL,( HINSTANCE ) GetWindowLong( hwnd, GWL_HINSTANCE ), NULL );
               
            } }
       
        break;
       
       
       
       
       
       
    case WM_KEYDOWN:
        {
            switch(( int ) wParam )
            {
               
               
               
            case VK_ESCAPE:
                int msgboxID = MessageBox( hwnd, "Czy na pewno chcesz zamknac okno?", "Wyjście", MB_YESNOCANCEL );
               
               
                switch( msgboxID )
                {
                case IDYES:
                   
                    DestroyWindow( hwnd );
                    // TODO: add code
                   
                }
               
               
               
               
                break;
               
               
            }
        }
        break;
       
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
   
   
   
   
   
   
   
   
   
   
    return 0;
}


Jak zrobić żeby bitmapa pojawiała się jeżeli  if (g_hgracc == true) ?
Gdzie trzeba dodać tego ifa?
Próbowałem w różnych miejscach, ale nie działa.
Bardzo proszę o szybką pomoc.
P-41969
DejaVu
» 2011-10-12 07:21:19
Kursy
GrafikaRozdział 5. Podstawowe mechanizmy do rysowania po kontekście urządzenia. Rysowanie linii, prostokątów, elips i okręgów oraz figur o innych kształtach. Ponadto pobieranie kontekstu urządzenia i jego zwalnianie, tworzenie pióra i pędzla oraz ich obsługa. (lekcja)
BitmapyRozdział 6. Ładowanie bitmap z pliku i wyświetlanie ich na ekranie, oraz tworzenie masek na bazie istniejących obrazów. Dodatkowo w rozdziale znajdują się także informacje o zwalnianiu zarezerwowanej pamięci, zagadnieniu kluczowym w GDI. (lekcja)
Animacja (lekcja)
P-41971
Kamil9132
Temat założony przez niniejszego użytkownika
» 2011-10-12 23:59:42
A mógłbyś to trochę uściślić?
Przeczytałem tamte teksy ale nadal nie za bardzo wiem co zrobić.
P-42011
DejaVu
» 2011-10-13 08:47:55
Potrafisz wyświetlić bitmapę? W kursie jest to omówione. Jak potrafisz wyświetlić bitmapę to potem jedyne co robisz to dopisujesz warunek dla kodu wyświetlającego bitmapę i gotowe.
P-42015
Kamil9132
Temat założony przez niniejszego użytkownika
» 2011-10-13 12:42:15
Jeżeli się nie mylę to, to jest odpowiedzialne za wyświetlenie bitmapy, tak?
BitBlt( hdc, 100, 200, info_bitmapy.bmWidth, info_bitmapy.bmHeight, hdcBitmapy, 0, 0, SRCCOPY );

Jeżeli dam to w ifa to nic się nie dzieje.
P-42016
DejaVu
» 2011-10-13 12:45:09
1. Zrób program który wyświetla bitmapę zawsze.
2. Wykomentuj linijkę która wyświetla bitmapę (sprawdź czy zniknęła).
3. Dopisz if'a.
4. Jeżeli bitmapa się nie będzie wyświetlała to znaczy, że wynik if'a ==false, więc nie wykonuje się kod który ma narysować bitmapę.
P-42017
Kamil9132
Temat założony przez niniejszego użytkownika
» 2011-10-13 13:25:02
Tylko ten if ma mieć na początku wartość false, a dopiero później się zmienia na true, do rysowania linii stosuje ten sam if.
P-42020
DejaVu
» 2011-10-13 13:26:53
No to zapewnij aby kod który jest odpowiedzialny za rysowanie wykonał się ponownie po zmianie wartości zmiennej.
P-42021
« 1 » 2 3
  Strona 1 z 3 Następna strona