+++ /dev/null
-/*\r
-* Copyright (c) 2007-2010 SlimDX Group\r
-* \r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"), to deal\r
-* in the Software without restriction, including without limitation the rights\r
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-* copies of the Software, and to permit persons to whom the Software is\r
-* furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included in\r
-* all copies or substantial portions of the Software.\r
-* \r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-* THE SOFTWARE.\r
-*/\r
-#include "stdafx.h"\r
-\r
-#include "../InternalHelpers.h"\r
-#include "../Resources.h"\r
-\r
-#include "RenderForm.h"\r
-\r
-using namespace System;\r
-using namespace System::Drawing;\r
-using namespace System::ComponentModel;\r
-using namespace System::Windows::Forms;\r
-\r
-namespace SlimDX\r
-{\r
-namespace Windows\r
-{\r
- RenderForm::RenderForm()\r
- {\r
- Construct( "SlimDX" );\r
- }\r
-\r
- RenderForm::RenderForm( System::String^ text )\r
- {\r
- Construct( text );\r
- }\r
-\r
- void RenderForm::Construct( System::String^ text )\r
- {\r
- Text = text;\r
- ClientSize = System::Drawing::Size( 800, 600 );\r
- MinimumSize = System::Drawing::Size( 200, 200 );\r
-\r
- ResizeRedraw = true;\r
- SetStyle( ControlStyles::AllPaintingInWmPaint | ControlStyles::UserPaint, true );\r
-\r
- Icon = SlimDX::Resources::BlackIcon;\r
- }\r
-\r
- void RenderForm::OnResizeBegin( EventArgs^ e )\r
- {\r
- Form::OnResizeBegin(e);\r
-\r
- sizeMove = true;\r
- cachedSize = Size;\r
- OnPauseRendering(e);\r
- }\r
-\r
- void RenderForm::OnResizeEnd( EventArgs^ e )\r
- {\r
- Form::OnResizeEnd(e);\r
-\r
- OnUserResized(e);\r
- UpdateScreen();\r
-\r
- sizeMove = false;\r
- OnResumeRendering(e);\r
- }\r
-\r
- void RenderForm::OnLoad( EventArgs^ e )\r
- {\r
- Form::OnLoad(e);\r
- cachedSize = Size;\r
- UpdateScreen();\r
- }\r
-\r
- void RenderForm::OnPaintBackground( PaintEventArgs^ e )\r
- {\r
- SLIMDX_UNREFERENCED_PARAMETER( e );\r
- }\r
-\r
- void RenderForm::OnPauseRendering(EventArgs^ e)\r
- {\r
- if (&RenderForm::PauseRendering != nullptr)\r
- PauseRendering(this, e);\r
- }\r
-\r
- void RenderForm::OnResumeRendering(EventArgs^ e)\r
- {\r
- if (&RenderForm::ResumeRendering != nullptr)\r
- ResumeRendering(this, e);\r
- }\r
-\r
- void RenderForm::OnUserResized(EventArgs^ e)\r
- {\r
- if (&RenderForm::UserResized != nullptr)\r
- UserResized(this, e);\r
- }\r
-\r
- void RenderForm::OnMonitorChanged(EventArgs^ e)\r
- {\r
- if (&RenderForm::MonitorChanged != nullptr)\r
- MonitorChanged(this, e);\r
- }\r
-\r
- void RenderForm::OnAppActivated(EventArgs^ e)\r
- {\r
- if (&RenderForm::AppActivated != nullptr)\r
- AppActivated(this, e);\r
- }\r
-\r
- void RenderForm::OnAppDeactivated(EventArgs^ e)\r
- {\r
- if (&RenderForm::AppDeactivated != nullptr)\r
- AppDeactivated(this, e);\r
- }\r
-\r
- void RenderForm::OnSystemSuspend(EventArgs^ e)\r
- {\r
- if (&RenderForm::SystemSuspend != nullptr)\r
- SystemSuspend(this, e);\r
- }\r
-\r
- void RenderForm::OnSystemResume(EventArgs^ e)\r
- {\r
- if (&RenderForm::SystemResume != nullptr)\r
- SystemResume(this, e);\r
- }\r
-\r
- void RenderForm::OnScreensaver(CancelEventArgs^ e)\r
- {\r
- if (&RenderForm::Screensaver != nullptr)\r
- Screensaver(this, e);\r
- }\r
-\r
- void RenderForm::WndProc( Message% m )\r
- {\r
- Int64 wparam = m.WParam.ToInt64();\r
-\r
- if (m.Msg == WM_SIZE)\r
- {\r
- if (wparam == SIZE_MINIMIZED)\r
- {\r
- minimized = true;\r
- maximized = false;\r
- OnPauseRendering(EventArgs::Empty);\r
- }\r
- else\r
- {\r
- RECT rect;\r
- GetClientRect(reinterpret_cast<HWND>(m.HWnd.ToPointer()), &rect);\r
- if (rect.bottom - rect.top == 0)\r
- {\r
- // Rapidly clicking the task bar to minimize and restore a window\r
- // can cause a WM_SIZE message with SIZE_RESTORED when \r
- // the window has actually become minimized due to rapid change\r
- // so just ignore this message\r
- }\r
- else if (wparam == SIZE_MAXIMIZED)\r
- {\r
- if (minimized)\r
- OnResumeRendering(EventArgs::Empty);\r
-\r
- minimized = false;\r
- maximized = true;\r
-\r
- OnUserResized(EventArgs::Empty);\r
- UpdateScreen();\r
- }\r
- else if (wparam == SIZE_RESTORED)\r
- {\r
- if (minimized)\r
- OnResumeRendering(EventArgs::Empty);\r
-\r
- minimized = false;\r
- maximized = false;\r
-\r
- if (!sizeMove && Size != cachedSize)\r
- {\r
- OnUserResized(EventArgs::Empty);\r
- UpdateScreen();\r
- cachedSize = Size;\r
- }\r
- }\r
- }\r
- }\r
- else if (m.Msg == WM_ACTIVATEAPP)\r
- {\r
- if (wparam != 0)\r
- OnAppActivated(EventArgs::Empty);\r
- else\r
- OnAppDeactivated(EventArgs::Empty);\r
- }\r
- else if (m.Msg == WM_POWERBROADCAST)\r
- {\r
- if (wparam == PBT_APMQUERYSUSPEND)\r
- {\r
- OnSystemSuspend(EventArgs::Empty);\r
- m.Result = IntPtr(1);\r
- return;\r
- }\r
- else if (wparam == PBT_APMRESUMESUSPEND)\r
- {\r
- OnSystemResume(EventArgs::Empty);\r
- m.Result = IntPtr(1);\r
- return;\r
- }\r
- }\r
- else if (m.Msg == WM_MENUCHAR)\r
- {\r
- // A menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key\r
- // So just ignore and don't beep\r
- m.Result = IntPtr(MAKELRESULT(0, MNC_CLOSE));\r
- return;\r
- }\r
- else if (m.Msg == WM_SYSCOMMAND)\r
- {\r
- wparam &= 0xFFF0;\r
- if (wparam == SC_MONITORPOWER || wparam == SC_SCREENSAVE)\r
- {\r
- CancelEventArgs^ e = gcnew CancelEventArgs();\r
- OnScreensaver(e);\r
- if (e->Cancel)\r
- {\r
- m.Result = IntPtr::Zero;\r
- return;\r
- }\r
- }\r
- }\r
-\r
- Form::WndProc(m);\r
- }\r
-\r
- void RenderForm::UpdateScreen()\r
- {\r
- DisplayMonitor^ current = DisplayMonitor::FromWindow(Handle);\r
- if (monitor != nullptr && monitor->DeviceName != current->DeviceName)\r
- {\r
- monitor = current;\r
- OnMonitorChanged(EventArgs::Empty);\r
- }\r
-\r
- monitor = current;\r
- }\r
-}\r
-}
\ No newline at end of file