已回答 如何关闭图形窗口? (绘图。图形)

rex64

会员
已加入
2020年7月31日
留言内容
14
编程经验
10+
我试图弄清楚如何使该类初始化,但如何将代码返回给调用函数。我正在从WinForms窗体调用Drawing.Graphics窗口。


我一次尝试了其中的几个,但它们没有帮助:
C#:
    _window.Dispose();
    System.Windows.Forms.Application.ExitThread();
    System.Environment.Exit(Convert.ToInt32(unlockedPopup));
    return -1;



    #region Assembly GameOverlay, Version=4.3.0.0, Culture=neutral, PublicKeyToken=null
    // C:\Users\Jeff\Documents\Visual Studio 2010\Projects\StudyxMain\StudyxMain\packages\GameOverlay.Net.4.3.0\lib\net45\GameOverlay.dll
    #endregion
  
    using System;
    using GameOverlay.Drawing;
  
    namespace GameOverlay.Windows
    {
        //
        // Summary:
        //     Represents an OverlayWindow which is used to draw at any given frame rate.
        public class GraphicsWindow : OverlayWindow
        {
            //
            // Summary:
            //     Initializes a new GraphicsWindow.
            //
            // Parameters:
            //   device:
            //     Optionally specify a Graphics device to use.
            公共GraphicsWindow(图形设备= null);
            //
            // Summary:
            //     Initializes a new GraphicsWindow with the specified window position and size.
            //
            // Parameters:
            //   x:
            //     The window position on the X-Axis.
            //
            //   y:
            //     The window position on the Y-Axis.
            //
            //   width:
            //     The width of the window.
            //
            //   height:
            //     The height of the window.
            //
            //   device:
            //     Optionally specify a Graphics device to use.
            公共GraphicsWindow(int x,int y,int width,int height,图形设备= null);
  
            //
            // Summary:
            //     Allows an object to try to free resources and perform other cleanup operations
            //     before it is reclaimed by garbage collection.
            ~GraphicsWindow();
  
            //
            // Summary:
            //     Gets or sets a Boolean which determines whether this instance is running.
            public bool IsRunning { get; set; }
            //
            // Summary:
            //     Gets or sets a Boolean which determines whether this instance is paused.
            public bool IsPaused { get; set; }
            //
            // Summary:
            //     Gets or sets the used Graphics surface.
            public Graphics Graphics { get; }
            //
            // Summary:
            //     Gets or sets the frames per second (frame rate) at which this instance invokes
            //     its DrawGraphics event.
            public int FPS { get; set; }
  
            //
            // Summary:
            //     Fires when you should free any resources used for drawing with this instance.
            public event EventHandler<DestroyGraphicsEventArgs> DestroyGraphics;
            //
            // Summary:
            //     Fires when a new Scene / frame needs to be rendered.
            public event EventHandler<DrawGraphicsEventArgs> DrawGraphics;
            //
            // Summary:
            //     Fires when you should allocate any resources you use to draw using this instance.
            public event EventHandler<SetupGraphicsEventArgs> SetupGraphics;
  
            //
            public override void Create();
            //
            public override void Join();
            //
            // Summary:
            //     Pauses the graphics thread.
            public void Pause();
            //
            // Summary:
            //     Resumes the graphics thread.
            public void Unpause();
            //
            // Summary:
            //     Releases all resources used by this GraphicsWindow.
            //
            // Parameters:
            //   disposing:
            //     A Boolean value indicating whether this is called from the destructor.
            protected override void Dispose(bool disposing);
            //
            // Summary:
            //     Gets called when the graphics thread destorys the Graphics surface.
            //
            // Parameters:
            //   graphics:
            //     A Graphics surface.
            protected virtual void OnDestroyGraphics(Graphics graphics);
            //
            // Summary:
            //     Gets called when the graphics thread needs to render a new Scene / frame.
            //
            // Parameters:
            //   frameCount:
            //     The number of the currently rendered frame. Starting at 1.
            //
            //   frameTime:
            //     The current time in milliseconds.
            //
            //   deltaTime:
            //     The elapsed time in milliseconds since the last frame.
            protected virtual void OnDrawGraphics(int frameCount, long frameTime, long deltaTime);
            //
            // Summary:
            //     Gets called when the graphics thread setups the Graphics surface.
            //
            // Parameters:
            //   graphics:
            //     A Graphics surface.
            protected virtual void OnSetupGraphics(Graphics graphics);
            //
            protected override void OnSizeChanged(int width, int height);
            //
            protected override void OnVisibilityChanged(bool isVisible);
        }
    }


    using System;
    using System.Collections.Generic;
    using System.Text;
  
    using GameOverlay.Drawing;
    using GameOverlay.Windows;
  
     namespace StudyCSharp
    {
        public class OverlayQuestion : IDisposable
        {
            private readonly GraphicsWindow _window;
  
  
     public OverlayQuestion()
            {
                StudyX.Module1.initializeModule1();
  
                _brushes = new Dictionary<string, SolidBrush>();
                _fonts = new Dictionary<string, Font>();
                _images = new Dictionary<string, Image>();
  
                generateStudyQuestion();
              
  
  
  
  
                var gfx = new Graphics()
                {
                    MeasureFPS = true,
                    PerPrimitiveAntiAliasing = true,
                    TextAntiAliasing = true
                };
  
                int _ScreenWidth = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
                int _ScreenHeight = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
  
                _window = new GraphicsWindow(0, 0, _ScreenWidth, _ScreenHeight, gfx)
                {
                    FPS = 60,
                    IsTopmost = true,
                    IsVisible = true
                };
  
                _window.DestroyGraphics += _window_DestroyGraphics;
                _window.DrawGraphics += _window_DrawGraphics;
                _window.SetupGraphics += _window_SetupGraphics;
            }
    }
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
You can't exit out of Main() and expect the program to continue running. You'll need to keep the message pump running. Just following the standard WPF or WinForms project template and it'll lead you down the right direction.
 

rex64

会员
已加入
2020年7月31日
留言内容
14
编程经验
10+
如何返回代码,以便它可以恢复WinForms。我的表格已被锁定。

1.在WinForms中启动
2.我有一个调用Drawing.Graphics窗口的表单
3.我想在WinForms表单上恢复代码。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
我将假设基于命名空间,您正在尝试在Steam或Origin的基础上构建一些东西?在这种情况下,虽然可以做您打算做的事,但这也非常困难。它还需要DirectX的知识。从性能的角度来看,您是从错误的项目类型开始的。 WPF是您应该如何处理的。最后,您还应该注意,您将需要使用任务或线程进行广泛的了解。

如果我假设正确,那么这当然是我要确定您的应用程序要服务的功能。

如何返回代码,以便它可以恢复WinForms。
这不是针对代码作者的最佳问题吗?我假设您正在使用此: 命名空间GameOverlay.Windows | GameOverlay.Net文档 ?

主题也交叉发布在这里: 如何关闭C#图形窗口(Drawing.Graphics-非窗体) 此后一直关闭,不清楚。
 

rex64

会员
已加入
2020年7月31日
留言内容
14
编程经验
10+
实际上,除了共享数据或完成后返回数据外,我一切工作都很好。我只需要弄清楚如何关闭或返回表格即可。似乎应该很容易,只是不确定如何操作。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
很高兴听到您的声音,也感谢您抽出宝贵的时间回答我的问题。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
等等...,您知道怎么做DirectX,但是不知道基本的Windows是如何工作的吗?这张图片有些不对劲...
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
我真不敢相信我正在娱乐这个...
我是作者,你能帮我吗?
证明给我看?

让我们返回:
此链接包含构造函数: 类GraphicsWindow | GameOverlay.Net文档
方法 :
C#:
public GraphicsWindow(Graphics device = null)
下一个 :
C#:
            公共GraphicsWindow(int x,int y,int width,int height,图形设备= null);
也取自该页面。而且恰好与您上面的确切代码匹配:
公共GraphicsWindow(图形设备= null);
公共GraphicsWindow(int x,int y,int width,int height,图形设备= null);
我鄙视废话。所以,请不要胡说我。如果您是该代码的作者,那么您绝对应该并且应该知道它是如何工作的。既然您提出此声明,就意味着您已经为此写了文档。如果您为此编写了文档,那么为什么要在这里寻求帮助?

您在第5篇文章中所写的内容都没有对这里的任何人进行解释,这些内容是什么时候完成的呢?您在句子中间打来,就像我们本意是要知道那是什么一样。我们没有。

在p /#4上,我问了您许多您无视的问题。因此,告诉我们在我没有所有事实和我对您提出的某些问题的答案时,我们如何理解或帮助您?
 

rex64

会员
已加入
2020年7月31日
留言内容
14
编程经验
10+
1. "Steam or Origin...":是的,类似于其叠加层界面
2. WPF? :不,一个DevExpress ExtraForm,但我相信这类似于WinForms
3.应用程序的功能是在游戏顶部覆盖
4.这不是针对代码编写者的最佳问题吗?我是我的代码的作者
5.是的,我正在使用此:我假设您正在使用此: 命名空间GameOverlay.Windows | GameOverlay.Net文档 ?
6.我在这里发布了一个问题,但我认为您会轻松地返回焦点: Exit and Return Focus · Issue #65 · 米歇尔皮/GameOverlay.Net
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
  1. 您正在重新发明轮子。已经完成了,所以您如何计划与竞争对手竞争...修辞问题。如果您要坚持自己的UI设计的质量。使用WPF,别无其他。我希望Michel Dignard会知道这一点。

  2. 这不会削减。无论您以何种方式渲染叠加层,它都将显得断断续续,粗糙且丑陋。这是由于Winforms的呈现方式所致。 (过去我曾经开发过类似的应用程序,这是我的经验。)Michel Dignard也知道这一点。

  3. 那是错误的方式。将DirectX和OpenGL用于不兼容DirectX的游戏。您还应该注意并说明如何在游戏窗口上获得一个手柄并将其挂钩,然后注入该过程,而不会触发反作弊引擎禁止您的用户,并且永久禁止您的应用程序。我建议将您的应用提交给所有AntiCheat组织进行审查,以防止这种情况。

    我曾经与PunkBuster的Glen以及其他人一起工作,因此我非常熟悉并熟悉后续流程以及该行业的人员。也就是说,您的申请不太可能被接受。诸如PBBans之类的集线器可能仍会禁止您的应用程序用户。像这样的流媒体中心不是由Punkbuster运营的,它们按照自己的规则和政策运行,还拥有自己的禁止列表。将其作为警告并研究成功进行交互或注入游戏窗口的最佳做法。作为Epic Games的首席开发人员,您不应该知道吗?

  4. 文档代码(YOU)的作者如何管理自己的叠加项目的文档,却又不了解叠加的工作方式或不知道需要使用DirectX和OpenGL库的正确步骤?

  5. 让我说清楚。您需要了解您据称为其编写代码和文档的库的帮助吗?您声称是该代码的作者。您确实知道该代码的作者适用于Epic Games,但是,您不知道正确的过程来通过获取钩子窗口的句柄来覆盖钩住的窗口,并将您的表单注入游戏屏幕吗?您 发布 作为杰夫而不是 米歇尔·皮 在Stackoverflow上,我可能要添加的是Epic Games的Michel Dignard。
您是制作Fortnite的首席开发人员,您不了解自己的文档吗?请 :大声笑: 你把我们当白痴吗?

该主题即将与您的帐户一起永久关闭,以冒充Epic Games的知名开发人员,而您显然不是。

我还应该建议您,冒充他人是非法的。我在link in上的一位联系人认识了Michel。我会谨慎处理您下一次的答复,否则可能会发出停止和终止通知。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,028
地点
挪威
编程经验
10+
我只是尝试了Example,然后在Example实例上调用Dispose将立即关闭叠加层。该示例中要注意的一件事是Run方法中对_window.Join()的调用。如果在GUI应用程序中执行此操作,则必须调用“在单独的线程中运行”,在GUI应用程序中,也不需要Join调用。请记住,这只是屏幕上所有内容的基础,您自己的GUI应用程序应该始终保持响应状态。 _window.Create方法确实创建了一个新的后台线程,因此不必担心。
 

rex64

会员
已加入
2020年7月31日
留言内容
14
编程经验
10+
我只是尝试了Example,然后在Example实例上调用Dispose将立即关闭叠加层。该示例中要注意的一件事是Run方法中对_window.Join()的调用。如果在GUI应用程序中执行此操作,则必须调用“在单独的线程中运行”,在GUI应用程序中,也不需要Join调用。请记住,这只是屏幕上所有内容的基础,您自己的GUI应用程序应该始终保持响应状态。 _window.Create方法确实创建了一个新的后台线程,因此不必担心。
当我注释掉加入时,这似乎释放了控制权,谢谢您的帮助!
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
1. "Steam or Origin...":是的,类似于其叠加层界面
因此,它具有相似的接口,但没有Steam,Origin或Xfire之类的程序吗?那么,您是在作弊还是游戏技巧?这就是我从答复中得到的。此外,如果有任何合法的开发人员正在制作供用户在合法的应用程序中使用的程序,他们将首先将我在下面所说的作为优先事项,以确保他们不会受到反作弊引擎的禁止。显然,当用户开始被禁止使用该应用程序时,您不会在乎您的应用程序将产生的声誉。我还要指出,这不是Steam和其他DRM软件的工作方式,正如我所说,您可能最终会收到任何发送给反作弊公司的申请,这些申请都将您的应用列入了黑名单。这不会引起您的共鸣,这一事实证实并加深了我的怀疑。

而且为什么您要为此在房子周围转转?如果您正在构建合法的DRM应用程序。您正在使用依赖于另一个库的库 Sharpdx / SharpDX (也不再受支持)。而且,它或多或少是DirectX dll的包装器。为什么不只使用DirectX dll和OpenGL库呢?您越来越有可能被这种方法禁止用户。就像我说的 :
那是错误的方式。将DirectX和OpenGL用于不兼容DirectX的游戏。您还应该注意并说明如何在游戏窗口上获得一个手柄并将其挂钩,然后注入该过程,而不会触发反作弊引擎禁止您的用户,并且永久禁止您的应用程序。我建议将您的应用提交给所有AntiCheat组织进行审查,以防止这种情况。

我曾经与PunkBuster的Glen以及其他人一起工作,因此我非常熟悉并熟悉后续流程以及该行业的人员。也就是说,您的申请不太可能被接受。诸如PBBans之类的集线器可能仍会禁止您的应用程序用户。像这样的流媒体中心不是由Punkbuster运营的,它们按照自己的规则和政策运行,还拥有自己的禁止列表。将其作为警告并研究成功进行交互或注入游戏窗口的最佳做法。作为Epic Games的首席开发人员,您不应该知道吗?
除非您正在编写游戏引擎作弊项,否则为什么这不会引起您的注意?
我是我的代码的作者,而不是他的代码。
作为记录,当您使用其他人的图书馆时。您不是在使用自己的代码,实际上是在使用从Github明确复制的其他人的代码。那不会使您成为代码的作者。
 
最佳 底部