问题标签 [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.

0 投票
2 回答
1541 浏览

.net - VB.net 中的 Form Paint 事件

奇怪的问题:我有一个应用程序,我在主窗体的 Form_Paint 事件中触发了一些代码,它在我的机器上工作正常,但在其他机器上根本不工作。

我尝试在另一台机器上调试代码,Form_Paint 事件根本没有触发!

0 投票
5 回答
14496 浏览

c# - C#:在 ProgressBar 上覆盖 OnPaint 不起作用?

ProgressBar正在考虑创建一个在其自身上绘制一些文本的内容应该很容易。但是,我不太确定这里发生了什么......

我添加了以下两个覆盖:

但是,我没有收到任何文字,甚至似乎都没有调用这些方法。这里发生了什么?


更新:由于到目前为止的两个答案,我已经OnPaint通过 using实际调用了它SetStyle(ControlStyles.UserPaint, true),并且我已经通过发送new Rectangle(0, 0, Width, Height)而不是发送它来在正确的位置绘制文本Bounds

我现在确实收到了文字,但它ProgressBar已经消失了……重点是在ProgressBar. 知道如何解决这个问题吗?

0 投票
1 回答
3486 浏览

winapi - Win32 WM_PAINT 和一个子窗口

如何在子窗口内绘制?

CreateWindow(WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN)我想我应该用一些WndProc(没有)创建主窗口WM_PAINT。在其上WM_CREATE,我创建了另一个窗口CreateWindow(WS_CHILD | WS_CLIPCHILDREN),另一个窗口WndProc2WM_PAINT. 但是,似乎另一个处理程序进入了无限循环。我做错了什么?

请问,你没有建议或例子吗?

PS:WS_CLIPCHILDREN 似乎没有影响这一点,并且两者都WndProc默认为DefWindowProc

编码:

0 投票
2 回答
3409 浏览

c# - C#,覆盖 OnPaint:带双缓冲区的 alpha 透明度

我正在使用带有C#的.Net Compact Framework 2.0 SP2开发Windows Mobile 5.0 及更高版本的应用程序。

我在自定义消息框上重写 OnPaint 方法,该消息框绘制了一个位图,该位图用 alpha 透明度填充整个表单,以及一个带有按钮的渐变框和半透明背景上的消息。

我正在测试它,但它太慢了,所以我将使用双缓冲。我可以使用双缓冲区来绘制渐变框和测试,但如果我使用带有 alpha 透明度的背景位图的双缓冲区,它不会绘制 alpha 透明度。所以我只用渐变框和消息和按钮做双缓冲。免费的透明位图直接绘制在 e.Graphics 上。

我想知道是否可以将 e.Graphics 保存在位图上以完成所有工作并结束 OnPaint 方法绘制到 e.Graphics 这个我之前保存的位图。

这是我的代码:

bmpOffscreen:双缓冲区的位图。

也许我可以在 bmpOffscreen 中获取表单的快照,然后在其上绘制半透明背景、渐变框和文本。

总结: 我想将 alpha blend 与 double buffer 一起使用

有什么建议吗?

0 投票
5 回答
3072 浏览

c# - 高效使用 OnPaint

我在 Visual Studio .Net 中编程并使用 C#。

我正在创建自己的控件,该控件根据从模数转换器 (ADC) 获得的值绘制波形。我获取输入点并将它们转换为 X 和 Y 点,以便在我的控件中正确绘制图形。

我的 OnPaint 方法中有一个循环,它遍历所有点并在当前点和下一个点之间调用 DrawLine 方法。

然而,这是非常低效的,因为其中一些图表有 8192 个点,而系统实际上有 9 个我想同时显示的 ADC。每次页面重绘时,所有图形都需要几乎一秒钟的时间来重绘(尤其是在调试期间)。

最重要的是,我的功能允许您放大和平移波浪以获得更好的视图(就像谷歌地图一样),并且所有 9 个波浪一起放大和平移。

所有这些功能都非常“生涩”,因为我在 mousewheel 和 mousemove 上调用了 invalidate。基本上,这一切都有效,但不像我想要的那么顺利。

我想知道是否有一种方法可以从数据中创建一个预先绘制的对象,然后在绘图区域中绘制一个放大和翻译的图片版本。

任何帮助将不胜感激,即使它只是为我指明了正确的方向。

0 投票
1 回答
2395 浏览

c# - Winforms Invalidate 不会启动 OnPaint

我正在尝试使用问题中给出的代码平滑移动表单如何以不同的速度平滑地为 Windows 窗体位置设置动画?

但由于某种原因,我的 this.Invalidate() 调用永远不会触发 OnPaint 事件。表格上是否需要一些配置才能实现这一点?

编辑:

涉及线程,因为它在具有自己的消息循环的后台工作程序中运行。这是代码:

形式 :

0 投票
2 回答
1421 浏览

.net - GDI+ 中的多个有序平移/缩放变换

我在 Windows 窗体应用程序的图形上下文中绘制了许多图形对象。与渲染路径的 ui 元素有一些交互,允许用户平移、缩放和设置缩放点的原点。我的问题是,是否可以在图形对象上设置一系列变换操作,如下所示?

[1] 应用平移变换(将路径移动到缩放变换的原点) [2] 应用缩放变换 [3] 应用平移变换(将路径移回正确的位置)

似乎我只能订购单个变换操作类型(平移、缩放等),因此两个平移变换不会应用于正确的点(缩放操作的任一侧)。有没有办法做到这一点?或者,是否可以为比例变换设置原点?

我确实弄乱了嵌套的图形容器,但它们似乎没有帮助。

谢谢,

最大限度

0 投票
0 回答
2867 浏览

text - wxpython:透明背景上的静态文本

我正在尝试创建一个wx.StaticText没有背景的子类。我尝试使用 设置背景的 alpha 组件SetBackgroundColor,或者SetTransparent在没有运气的各种对象上使用,但也许只是因为我是个菜鸟 :)

无论如何,我结束了子类wx.StaticText化,修改了OnPaint方法以便不绘制背景,并绑定EVT_PAINT到这个新方法。

它在大多数情况下工作得很好(当应用程序启动时,或者当它被另一个窗口隐藏后重新绘制时),但是每当我SetLabel在我的子类的实例上使用该方法时,调用StaticText的不是我的方法OnPaint刷新窗口,我最终得到默认的灰色背景。

下面是一个“小”的工作示例。它首先显示没有背景的文本,等待1.5秒,然后更改文本的标签,这也绘制了背景(并且不调用我自制的绘制方法)。

我想我只是遗漏了一些东西,但是我对 wxpython 的理解还不足以弄清楚是什么。如果有人能启发我将不胜感激

先感谢您!

0 投票
2 回答
564 浏览

windows - 仅用边框绘制窗口

如何创建仅显示窗口边框的应用程序窗口,但我不想显示窗口本身的内容。我的意思是我想通过整个窗口区域查看桌面的其余部分或其他窗口。不使用透明胶片。只画边框。

我想这就像检测消息 WM_ERASEBKGND 和 WM_PAINT 并且在这些情况下什么都不做以强制不在内容中绘画,但我已经尝试过并且窗口仍在绘制白色背景。

我怎么才能得到它?

0 投票
4 回答
24870 浏览

c# - 将文本准确放置在 System.Label 上的图形抽绳

我在 VS2008中重写了Label控件的OnPaint方法:

这行得通,但我真的很想知道如何将文本垂直和水平居中。我听说过这种MeasureString()方法,但我的“文本”使事情变得复杂,因为它可能包含分页符。

有人可以指导我如何做到这一点吗?