问题标签 [onpaint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 将 Windows 窗体 OnPaint 转换为等效的 WPF 形状
我有一个绘制一些形状的现有 OnPaint 方法:
}
我已将其转换为 - 在 WPF 中:
调整大小的行为是不一样的。有人可以告诉我如何解决这个问题,或者是一个更好的 WPF 示例!?
delphi - 设置 Paintbox 的字体大小会导致调用 OnPaint
我需要将一些文本写入画框,并在 OnPaint 事件中完成。当我在方法中设置两次字体大小时,会重复调用 OnPaint 事件。
要亲自查看,请尝试以下操作:
- 创建一个新的 VCL Forms 应用程序
- 在表单上放置一个颜料盒
- 将以下代码放入 OnPaint 事件中:
当您运行该应用程序时,您会看到画框上“跳跃”了一条线。但是,如果您删除设置字体大小的一条或两条线,您将看到一条固定的线。
为什么会发生这种情况,我能做些什么来解决它?
c# - C# WinForms - 绘制方法问题
我不确定使用图形的最佳方式是什么 - 我应该将我的类附加到主窗体 Paint 事件然后进行绘图,还是像这样从覆盖的 OnPaint void 调用它更好?我的意思是,这样做可以吗:
c# - 当 DoubleBuffered 设置为 true 时覆盖 OnPaint 的问题
我创建了一个派生自 Panel 的自定义控件。我用它来显示一个使用 BackgroundImage 属性的图像。我覆盖 OnClick 方法并将 isSelected 设置为 true,然后调用 Invalidate 方法并在覆盖的 OnPaint 中绘制一个矩形。一切都很好,直到我将 DoubleBuffered 设置为 true。矩形被绘制,然后被擦除,我不明白为什么会这样。
c# - GDI+ 绘制队列问题
同志们)我在多线程应用程序中发现了 Invalidate 方法的一些有趣行为。我希望你能帮我解决一个问题...
我在尝试一次使不同的控件无效时遇到了麻烦:虽然它们是相同的,但一个成功地重新绘制了自己,但另一个 - 没有。
这是一个示例:我有一个表单(MysticForm),上面有两个面板(SlowRenderPanel)。每个面板都有一个计时器,并以 50 毫秒为周期调用 Invalidate() 方法。在 OnPaint 方法中,我在面板中心绘制当前 OnPaint 调用的数量。但请注意,在 OnPaint 方法中调用 System.Threading.Thread.Sleep(50) 来模拟长时间绘制过程。
所以问题是首先添加的面板比另一个面板更频繁地重新绘制自己。
调试信息:
1) 每个面板都有一个 bool 字段 useUnsafeTime(默认设置为 true),它允许使用 System.Windows.Forms.Timer (false) insted of System.Threading.Timer (true)。在第一种情况下(System.Windows.Forms.Timer)一切正常。删除 OnPaint 中的 System.Threading.Sleep 调用也可以使执行正常。
2) 将计时器间隔设置为 25 毫秒或更短,完全可以防止第二个面板重绘(而用户不调整表单大小)。
3)使用 System.Windows.Forms.Timer 导致速度增加
4)强制控制进入同步上下文(调用)没有意义。我的意思是 Invalidate(invalidateChildren = false) 是“线程安全的”,并且在不同的上下文中可能有不同的行为
5) 在这两个定时器的 IL 比较中没有发现什么有趣的东西……它们只是使用不同的 WinAPI 函数来设置和删除定时器(Threading.Timer 的 AddTimerNative、DeleteTimerNative;Windows.Forms.Timer 的 SetTimer、KillTimer)和 Windows.Forms .Timer 使用 NativeWindow 的 WndProc 方法来提升 Tick 事件
我在我的应用程序中使用了类似的代码片段,不幸的是无法使用 System.Windows.Forms.Timer)我使用两个面板的长时间多线程图像渲染,并且在每个面板上完成渲染后调用 Invalidate 方法.. .
如果有人可以帮助我了解幕后发生的不同以及如何解决问题,那就太好了。
PS有趣的行为不是吗?=)
c# - 为什么我的 c#paint 方法内存不足?
我是 C# 的新手,并尝试通过编写一些简单的应用程序来熟悉语法和 .NET 库来学习。我最近参与的一个小项目是一个极地钟,就像这里找到的那个。
我早期注意到的一个问题是应用程序会不断“闪烁”,这确实与演示无关,所以我在网上阅读了有关如何实现双缓冲区的信息,它消除了这个问题,但可能有也可能没有与问题有关。这是我的onPaint
方法;它由定时器控制每 33ms (~30 FPS) 调用一次。应用程序的大部分其余部分只是用于拖动应用程序(因为它是无框且具有透明背景)、双击退出等的处理程序。
我认为通过在方法结束时处理所有东西我会很安全,但这似乎没有帮助。此外,运行时和 OutOfMemoryException 之间的间隔不是恒定的;一旦它只发生在几秒钟内,但通常需要一两分钟。下面是一些类范围的变量声明。
还有一个屏幕截图(编辑:屏幕截图链接到带有一些代码的视图):
(来源:ggot.org)
编辑:堆栈跟踪!
似乎与上次崩溃的同一行,drawArc
循环内的主线。
delphi - 如何制作具有透明背景的 tmemo 和 Tedit?
如何制作具有透明背景的 tmemo 和 Tedit?或在其画布上添加图像背景。在Delphi7上都可以使用
.net - 在我的 OnPaint 覆盖中绘制后是否需要恢复 Graphics 状态(对于 .NET 控件)
考虑以下用于 .NET 控件的重写 OnPaint 方法:
完成后不恢复 e.Graphics 对象的状态是否有问题?
在 Java 中,这通常是通过制作传递的 Graphics 对象的副本来完成的,因此传递的 Graphics 对象不会改变,也不需要恢复它的状态。 类似的 Java 问题
我可以通过使用 Save() / Restore() 方法在 .NET 中实现这一点。所以我的问题是:
- .NET 中恢复图形状态是否必要/最佳实践?
- Save() / Restore() 方法有多贵?
c# - .Net DrawString 字体引用在调用后发生变化
给定以下代码。第一个 DrawString 方法是否有可能在 Arial 而不是 Times New Roman 中绘制?
我有一个问题,基本上这段代码会间歇性地以错误的字体绘制第一个字符串。我现在已将代码更改为具有两个静态字体引用,但由于我无法重现代码,我无法确定它是否解决了问题。
注意: loc 是一个可以被实际代码改变的位置,我在这里去掉了一些代码来简化
这是我修复的整个方法。如果你看不出它有什么问题——我会去责怪一些宇宙射线之类的……
固定代码现在如下所示。现在更少的 GDI 调用:
如果我打算让它变得更加优化,我会将矩形测量部分放在 OnResize 的覆盖中,但我认为现在可以这样做......
c# - 在 C# 中用鼠标画线的正确方法是什么
这是我用鼠标在图表上绘制自定义线的绘图代码。你能帮我以正确的方式做吗?
问题是,当我调整表格大小时,我的线条消失了。每当引发 onPaint 事件时,它就会消失。