====== WinAPI - pierwsze starcie ======
===== Co trzeba znać ? =====
* powtórka obowiązkowa C/C%%++%%, C#
* wskaźniki, struktury, typedef, makra, wskaźniki do funkcji, łańcuchy znakowe, alokacja pamięci, itd...
===== Hello World - szablon projektu VS =====
* Utwórz projekt Win32 wykorzystując szablon projektu dostępny w Visual Studio i zapoznaj się z zawartością tego szablonu (funkcja WinMain, typy zmiennych i konwencja nazewnicza WInAPI, rejetracja okna, tworzenie okna głównego, pętla komunikatów, zasoby, itp.).
* Dodaj [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505%28v=vs.85%29.aspx|MessageBox]] z wyświetlający komunikat "Hello World" z ikonką informacyjną i przyciskiem OK.
* Przed zamknięciem aplikacji (okna głownego) wyświetl MessageBox z zapytaniem czy na pewno zamknąć?
* Dodaj do okna przynajmniej jedną kontrolkę, np. przycisk (BUTTON), kontrolkę edycyjną (EDIT), pole statyczne (STATIC)
Przydatne referencje:
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/bb773169%28v=vs.85%29.aspx|Control library (MSDN)]]
===== Hello World 2 - pusty projekt =====
* Utwórz **pusty** projekt Win32 i dodaj plik źródłowy z funkcją główną [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms633559%28v=vs.85%29.aspx|WinMain]]
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
* Dodaj [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505%28v=vs.85%29.aspx|MessageBox]] z wyświetlający komunikat "Hello World" z ikonką informacyjną i przyciskiem OK.
===== Pierwsze okno =====
* Utwórz i zarejestruj klasę okien [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms633577%28v=vs.85%29.aspx|WNDCLASSEX]]
* Domyślna procedura okna
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hwnd, msg, wParam, lParam);
}
* Utwórz okno zgodne z zarejestrowaną klasą
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms632680%28v=vs.85%29.aspx|CreateWindowEx]]
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx|ShowWindow]]
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145167%28v=vs.85%29.aspx|UpdateWindow]]
* Pętla główna komunikatów
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
* Obsłuż komunikaty ''WM_CLOSE'' i ''WM_DESTROY''
* Niszczenie okna [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms632682%28v=vs.85%29.aspx|DestroyWindow]]
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644945%28v=vs.85%29.aspx|PostQuitMessage]]
* Przed zamknięciem wyświetl MessageBox z zapytaniem czy na pewno zamknąć?