public Display(Application application, WinApi.WndProc proc, DisplayStyle style) { m_application = application; m_instance = WinApi.GetModuleHandle(null); m_windowProc = new WinApi.WndProc(proc); m_className = "GRANITE_" + Guid.NewGuid().ToString("N"); WinApi.WindowClass wc = new WinApi.WindowClass() { style = WinApi.CS_OWNDC | WinApi.CS_VREDRAW | WinApi.CS_HREDRAW, windowProcedure = Marshal.GetFunctionPointerForDelegate(m_windowProc), instance = m_instance, cursor = WinApi.LoadCursor(IntPtr.Zero, WinApi.IDC_ARROW), className = m_className }; WinApi.RegisterClass(ref wc); uint s = WinApi.WS_POPUP; switch (style) { case DisplayStyle.Fixed: s = WinApi.WS_BORDER; break; case DisplayStyle.FixedWithTitle: s = WinApi.WS_CAPTION | WinApi.WS_SYSMENU; break; case DisplayStyle.Resizeable: s = WinApi.WS_POPUP | WinApi.WS_THICKFRAME; break; case DisplayStyle.ResizeableWithTitle: s |= WinApi.WS_CAPTION | WinApi.WS_SYSMENU | WinApi.WS_THICKFRAME | WinApi.WS_MINIMIZEBOX | WinApi.WS_MAXIMIZEBOX; break; } m_handle = WinApi.CreateWindowEx( 0, m_className, "", s, 0, 0, 800, 600, IntPtr.Zero, IntPtr.Zero, m_instance, IntPtr.Zero ); m_deviceContext = WinApi.GetDC(m_handle); }
public static void Run(IApplicationLogic logic, ApplicationSettings settings) { if (m_currentApplication == null) { if (logic == null) throw new ArgumentException("logic"); if (settings == null) throw new ArgumentException("settings"); try { using (m_currentApplication = new Application(logic, settings)) { m_currentApplication.Run(); } } finally { m_currentApplication = null; } } }