问题标签 [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 回答
2633 浏览

wpf - Windows 窗体 UserControl 覆盖未被调用

我正在创建一个从 UserControl 派生的 Windows 窗体控件,以嵌入到 WPF 应用程序中。我通常遵循此链接中给出的程序。

在我的 CPP 文件中:

一切都编译并运行,但是 OnPaint 方法永远不会被调用。

对要寻找的东西有什么想法吗?我用 C++ 做了很多,但对 WinForms 和 WPF 还是很陌生,所以它很可能是显而易见的......

0 投票
6 回答
7216 浏览

c# - 当必须在 C# 中不断重绘控件时,如何避免屏幕闪烁?

我有一个简单的面板,用作绘图表面。这里的目标是在某些情况下围绕子 ListView 绘制一个 4 像素宽的轮廓。当可以将某些东西拖入其中时,我想让轮廓跳动。

我只是在 ListView 周围绘制一个简单的矩形,并在计时器滴答事件中更新矩形的不透明度。更改不透明度时,将重新绘制边框。此时我正在对这幅画进行双重缓冲。我也只允许每 15 次左右重绘一次(计时器间隔为 20 毫秒)。经过这一切,绘图过程仍然有点闪烁。这是不可接受的,所以我需要一些关于如何避免这种情况的指导。

我看不到经常绘制控件的方法。需要有一个从不透明到实体的平滑过渡,然后再返回。当我足够降低滴答间隔(降低到大约 300 -500 毫秒)时,闪烁停止,但刷新率太慢。

我对任何想法持开放态度。也许我接近这个的方式是完全错误的,或者也许你们中的一个人已经创建了一个发光效果并且知道该怎么做。感谢您提前提供任何帮助。

0 投票
2 回答
502 浏览

c# - 用户绘制的控件正在使用以前的表单背景

我在表单上有几个用户绘制的控件,不幸的是,当显示表单时,用户绘制的控件显示的是以前的表单背景,而不是当前的表单背景。

OnPaint 事件很简单,OnBackgroundPaint 事件为空……

像这样:

如何让当前背景成为显示的透明度,而不是前一个表单的背景?

0 投票
3 回答
5691 浏览

c# - 使用用户绘制的控件显示表单时如何避免屏幕闪烁?

这样透明背景的问题就解决了。现在,每次我展示表单(或必须重新绘制)时,我都会得到很多闪烁。在绘制事件完成之前有什么方法我不能更新屏幕,或者有什么其他方法可以在绘制所有对象时停止 1/2 秒的闪烁和闪烁?

回答: 双缓冲是要走的路。我已经在控件上进行了双重缓冲,但必须在表单上进行设置。我虽然双缓冲仅在您自己继承 OnPaint 时才有效。

0 投票
1 回答
977 浏览

c++ - MFC,c ++在屏幕上显示和隐藏ctrls时,我可以暂时禁用绘画吗

我有一个屏幕,上面有 20 个控件。我想展示全部二十个,然后只隐藏那些与我正在做的事情无关的。

我的问题是屏幕绘制的循环之间。它看起来非常难看。
我知道我已经看到了这一点,但是对于我的生活,我找不到那个代码,甚至不记得我在哪个应用程序中看到了那个代码..

有人知道如何暂停油漆吗?

0 投票
2 回答
2291 浏览

c# - 扩展 System.Windows.Forms.ComboBox

我想使用 ReadOnly 属性扩展 System.Windows.Forms.ComboBox 控件,当 ReadOnly = true 时,它​​将显示所选项目的文本(类似于标签)。(我不喜欢通过设置 Enabled=false 实现的禁用外观)

我如何在winforms中做到这一点?这在 ASP.NET 中非常简单,我所要做的就是重写 Render 方法。然而,使用 winforms 似乎并不那么简单。

从我收集到的我需要

a) 覆盖 OnPaint 方法

b) 调用 this.SetStyle(ControlStyles.UserPaint, true) 以便调用 OnPaint。

但现在看来我必须自己完成所有的绘画。真的吗?当 ReadOnly = false 时,是否不能让基本 ComboBox 处理绘制控件?另外,我应该使用什么 ControlStyles?

0 投票
3 回答
8024 浏览

c# - 使用大量控件填充 FlowLayoutPanel 并按需绘制缩略图

我正在尝试制作ImageListBox一种可以显示大量缩略图的控件,例如 Picasa 使用的控件。

这是我的设计:

我有一个FlowLayoutPanel填充了很多对象的UserControl对象,例如 4,000 个。每个人都UserControl被分配了一个代表该Paint事件。当Paint事件被调用时,它会检查缩略图的内存缓存,如果图像不在缓存中,它会从磁盘中检索它。

我有两个要解决的问题:

  1. Paint即使UserControl不在视图中,WinForms 似乎也会触发一个事件。实际上只有 10 个左右的控件在视图中,其余的不是(FlowLayoutPanel.AutoScroll设置为true)。结果,它尝试检索所有图像的缩略图,这需要很长时间。

  2. UserControl对象添加到其中FlowLayoutPanel需要一些较长的时间,大约 2-3 秒。我可以忍受它,但我想知道是否有比以下更好的方法:

    /li>
0 投票
1 回答
2238 浏览

c# - 自定义控件以显示图像:将图像移动到内部

我正在为Windows Mobile开发C#应用程序。我有一个自定义控件,重写了 OnPaint以绘制用户使用指针移动的图像。我自己的 OnPaint 方法是这样的:

imageToShow它图像。

rectImageToShow这种方式在事件 OnResize 上初始化:

this.Topthis.Left是在自定义控件内绘制图像的左上角。

我认为它可以正常工作,但是当我移动图像时,它永远不会清除所有控件。我总是看到上一张图的一部分。

我做错了什么?

谢谢!

0 投票
2 回答
1954 浏览

c# - 正在为每个子控件调用 OnPaint 方法

我有一个 UserControl(WinForms,.net 2.0),我有这个:

我基本上想在 UserControl 上绘制一个边框,但矩形也在所有子控件中绘制!我从来没有读过它应该为每个子控件调用,有解决方案吗?

0 投票
3 回答
2864 浏览

c# - 为什么 DrawString 在 C# Winforms 中表现出意外行为?

我在 C# WinForms 中对控件进行了子类化,并且在我的OnPaint()处理程序中自定义了绘图文本。在我的表单中使用以下代码将字体设置为 Courier New:

在控件本身中,字符串存储在 中realText,我使用以下代码将其绘制到屏幕上:

一些随机示例文本的结果如下所示:http: //img219.imageshack.us/img219/1778/courier.png

例如,如果放大,您可以看到第一个“as”之间的空间与第二个“as”之间的空间不同(1 个像素对 2 个像素)。有谁知道可能导致这种情况的原因,或者我如何防止它发生?当我用不同的字体绘制时,间距有更多类似的怪异,但我认为它们都是同一个问题的结果。

提前感谢您的任何想法。