mirror of
https://github.com/johndoe6345789/SDL3CPlusPlus.git
synced 2026-05-06 11:29:38 +00:00
stuff
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
//
|
||||
// Copyright Contributors to the MaterialX Project
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#if defined(_WIN32)
|
||||
|
||||
#include <MaterialXRenderHw/SimpleWindow.h>
|
||||
#include <MaterialXRenderHw/WindowWrapper.h>
|
||||
#include <string>
|
||||
|
||||
MATERIALX_NAMESPACE_BEGIN
|
||||
|
||||
SimpleWindow::SimpleWindow() :
|
||||
_width(0),
|
||||
_height(0)
|
||||
{
|
||||
// Give a unique ID to this window.
|
||||
//
|
||||
static unsigned int windowCount = 1;
|
||||
_id = windowCount;
|
||||
windowCount++;
|
||||
|
||||
// Generate a unique string for our window class.
|
||||
sprintf_s(_windowClassName, "_SW_%u", _id);
|
||||
}
|
||||
|
||||
// No-op window procedure
|
||||
LRESULT CALLBACK NoOpProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case WM_CLOSE:
|
||||
case WM_DESTROY:
|
||||
break;
|
||||
default:
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool SimpleWindow::initialize(const char* title,
|
||||
unsigned int width, unsigned int height,
|
||||
void* /*applicationShell*/)
|
||||
{
|
||||
HINSTANCE hInstance = GetModuleHandle(NULL);
|
||||
|
||||
// Basic windows class structure
|
||||
//
|
||||
WNDCLASS wc;
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
|
||||
wc.lpfnWndProc = (WNDPROC) NoOpProc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hInstance = hInstance; // Set the instance to this application
|
||||
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = NULL; // No background required
|
||||
wc.lpszMenuName = NULL; // No menu required
|
||||
wc.lpszClassName = _windowClassName;
|
||||
|
||||
if (!RegisterClass(&wc))
|
||||
{
|
||||
_id = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Window style and extended style
|
||||
//
|
||||
DWORD dwStyle = WS_OVERLAPPEDWINDOW;
|
||||
DWORD dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
|
||||
|
||||
// Set the rectangle of the client area.
|
||||
RECT WindowRect;
|
||||
WindowRect.left = (long) 0;
|
||||
WindowRect.top = (long) 0;
|
||||
WindowRect.right = (long) width;
|
||||
WindowRect.bottom = (long) height;
|
||||
|
||||
// Calculate the exact window size (including border) so that the
|
||||
// client area has the desired dimensions.
|
||||
//
|
||||
AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);
|
||||
|
||||
// Attempt to create the window.
|
||||
HWND hWnd = CreateWindowEx(dwExStyle, _windowClassName, title,
|
||||
dwStyle | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
|
||||
0, 0, // Window position
|
||||
WindowRect.right - WindowRect.left, // Window width (including borders)
|
||||
WindowRect.bottom - WindowRect.top, // Window height (including borders/title bar)
|
||||
NULL, // No parent window
|
||||
NULL, // No menu
|
||||
hInstance, // Instance
|
||||
NULL); // Don't pass anything To WM_CREATE
|
||||
|
||||
if (!hWnd)
|
||||
{
|
||||
_id = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
_windowWrapper = WindowWrapper::create(hWnd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
SimpleWindow::~SimpleWindow()
|
||||
{
|
||||
HWND hWnd = _windowWrapper->externalHandle();
|
||||
if (hWnd)
|
||||
{
|
||||
_windowWrapper->release();
|
||||
DestroyWindow(hWnd);
|
||||
}
|
||||
|
||||
UnregisterClass(_windowClassName, GetModuleHandle(NULL));
|
||||
}
|
||||
|
||||
MATERIALX_NAMESPACE_END
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user