Witam,
Mam sobie taki oto kod:
#define WIN32_LEAN_AND_MEAN //zapobiega dołączaniu do kodu wynikowego
//aplikacji zbędnych modułów, które nie
//zostaną wykorzystane
#include <windows.h>
//procedura okienkowa
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT paintStruct;
HDC hDC; //kontekst urządzenia
char string[] = "Witka!";
switch(message)
{
case WM_CREATE:
return 0; break;
case WM_CLOSE:
PostQuitMessage(0); return 0; break;
case WM_PAINT:
hDC = BeginPaint(hwnd, &paintStruct);
//wybiera kolor niebieski
SetTextColor(hDC, COLORREF(0x00FF0000));
//wyświetla tekst w środku okna
TextOut(hDC, 150, 150, string, sizeof(string)-1);
EndPaint(hwnd, &paintStruct);
return 0;
break;
default:
break;
}
return (DefWindowProc(hwnd, message, wParam, lParam));
}
//tu zaczyna się aplikacja
int WINAPI
WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASSEX windowClass; //klasa okna
HWND hwnd; //uchwyt okna
MSG msg; //komunikat
bool done; //znacznik zakończenia aplikacji
//tworzymy strukturę definiującą klasę okna
windowClass.cbSize = sizeof(WNDCLASSEX);
windowClass.style = CS_HREDRAW | CS_VREDRAW;
windowClass.lpfnWndProc = WndProc;
windowClass.cbClsExtra = 0;
windowClass.cbWndExtra = 0;
windowClass.hInstance = hInstance;
windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //domyślna ikona
windowClass.hCursor= LoadCursor(NULL, IDC_ARROW); //domyślny kursor
windowClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//białe tło
windowClass.lpszMenuName = NULL; //bez menu
windowClass.lpszClassName = "MojaKlasa";
windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); //logo Windows jako mała ikonka
//rejestruj klasę okna
if (!RegisterClassEx(&windowClass))
return 0;
//tworzymy okno
hwnd = CreateWindowEx(NULL, //bez rozszerzonego stylu
"MojaKlasa", //nazwa klasy
"Prawdziwa aplikacja Windows!", //nazwa aplikacji
WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_SYSMENU, //styl okna
100,100, //współrzędne x, y
400,400, //szerokość, wysokość
NULL, //uchwyt okna nadrzędnego
NULL, //uchwyt menu
hInstance, //instancja aplikacji
NULL); //bez dodatkowych paramentrów
//sprawdza czy utworzenie okna się powiodło (wtedy hwnd będzie NULL)
if (!hwnd)
return 0;
done = false; //inicjuje zmienną warunku pętli
//pęla przetwarzania komunikatów
while (!done)
{
PeekMessage(&msg, hwnd, NULL, NULL, PM_REMOVE);
if (msg.message==WM_QUIT)
{
done = true;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
Po uruchomieniu pojawia się okno aplikacji z napisem.
Problem polega na tym, że gdy chcę zamknąć program wykorzystując przycisk "zamknij" (krzyżyk) w prawym górnym rogu okna - nic się nie dzieje!
Mało tego, przycisk zaczyna działać dopiero w momencie przeskalowania okna lub przesunięciu go w inne miejsce ekranu.
Co to ma być?!
system: WindowsXP; kompilator: Visual C++
Pozdrawiam
P.S. 1. Ten kod to pierwszy przykład z książki "OpenGL. Programowanie Gier";
P.S. 2. Przepraszam, jeżeli to już było, ale nie mogłem znaleźć na forum.