Witam
Mam taki kod:
#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;
}
Dopiero się uczę winapi i nie wiem jak zrobić żeby bitmapa pojawiła się dopiero po spełnieniu jakiegoś warunku (if cośtam). Próbowałem w różnych miejscach to dodać ale nie działa :(
Bardzo proszę o szybką pomoc.