From 9a298ca833d9b6a3425bb30c2e52cf04e34aeb7c Mon Sep 17 00:00:00 2001 From: James Cowgill Date: Fri, 23 Aug 2013 09:57:55 +0100 Subject: Imported Upstream version 2.1+dfsg --- examples/win32/Win32.cpp | 130 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 examples/win32/Win32.cpp (limited to 'examples/win32/Win32.cpp') diff --git a/examples/win32/Win32.cpp b/examples/win32/Win32.cpp new file mode 100644 index 0000000..4d70931 --- /dev/null +++ b/examples/win32/Win32.cpp @@ -0,0 +1,130 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + +HWND button; + + +//////////////////////////////////////////////////////////// +/// Function called whenever one of our windows receives a message +/// +//////////////////////////////////////////////////////////// +LRESULT CALLBACK onEvent(HWND handle, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + // Quit when we close the main window + case WM_CLOSE : + { + PostQuitMessage(0); + return 0; + } + + // Quit when we click the "quit" button + case WM_COMMAND : + { + if (reinterpret_cast(lParam) == button) + { + PostQuitMessage(0); + return 0; + } + } + } + + return DefWindowProc(handle, message, wParam, lParam); +} + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \param Instance : Instance of the application +/// +/// \return Error code +/// +//////////////////////////////////////////////////////////// +INT WINAPI WinMain(HINSTANCE instance, HINSTANCE, LPSTR, INT) +{ + // Define a class for our main window + WNDCLASS windowClass; + windowClass.style = 0; + windowClass.lpfnWndProc = &onEvent; + windowClass.cbClsExtra = 0; + windowClass.cbWndExtra = 0; + windowClass.hInstance = instance; + windowClass.hIcon = NULL; + windowClass.hCursor = 0; + windowClass.hbrBackground = reinterpret_cast(COLOR_BACKGROUND); + windowClass.lpszMenuName = NULL; + windowClass.lpszClassName = TEXT("SFML App"); + RegisterClass(&windowClass); + + // Let's create the main window + HWND window = CreateWindow(TEXT("SFML App"), TEXT("SFML Win32"), WS_SYSMENU | WS_VISIBLE, 200, 200, 660, 520, NULL, NULL, instance, NULL); + + // Add a button for exiting + button = CreateWindow(TEXT("BUTTON"), TEXT("Quit"), WS_CHILD | WS_VISIBLE, 560, 440, 80, 40, window, NULL, instance, NULL); + + // Let's create two SFML views + HWND view1 = CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 20, 20, 300, 400, window, NULL, instance, NULL); + HWND view2 = CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 340, 20, 300, 400, window, NULL, instance, NULL); + sf::RenderWindow SFMLView1(view1); + sf::RenderWindow SFMLView2(view2); + + // Load some textures to display + sf::Texture texture1, texture2; + if (!texture1.loadFromFile("resources/image1.jpg") || !texture2.loadFromFile("resources/image2.jpg")) + return EXIT_FAILURE; + sf::Sprite sprite1(texture1); + sf::Sprite sprite2(texture2); + sprite1.setOrigin(sf::Vector2f(texture1.getSize()) / 2.f); + sprite1.setPosition(sprite1.getOrigin()); + + // Create a clock for measuring elapsed time + sf::Clock clock; + + // Loop until a WM_QUIT message is received + MSG message; + message.message = static_cast(~WM_QUIT); + while (message.message != WM_QUIT) + { + if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) + { + // If a message was waiting in the message queue, process it + TranslateMessage(&message); + DispatchMessage(&message); + } + else + { + float time = clock.getElapsedTime().asSeconds(); + + // Clear views + SFMLView1.clear(); + SFMLView2.clear(); + + // Draw sprite 1 on view 1 + sprite1.setRotation(time * 100); + SFMLView1.draw(sprite1); + + // Draw sprite 2 on view 2 + sprite2.setPosition(std::cos(time) * 100.f, 0.f); + SFMLView2.draw(sprite2); + + // Display each view on screen + SFMLView1.display(); + SFMLView2.display(); + } + } + + // Destroy the main window (all its child controls will be destroyed) + DestroyWindow(window); + + // Don't forget to unregister the window class + UnregisterClass(TEXT("SFML App"), instance); + + return EXIT_SUCCESS; +} -- cgit v1.2.3