问题标签 [wm-paint]

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 投票
3 回答
1840 浏览

c++ - 使用 BeginPaint/EndPain 而不是 GetDC/ReleaseDC 来响应 WM_PAINT 消息有什么特别之处吗?

可以使用 GetDC/ReleaseDC 在窗口的客户区进行绘制。但是为了响应 WM_PAINT 消息,必须使用 BeginPaint/EndPaint。这有什么特别之处吗?

0 投票
2 回答
5439 浏览

c++ - 在子类 CStatic 控件中处理 WM_PAINT

我创建了一个自定义控件,其类CStatic作为基类。WM_PAINT目前我使用事件处理绘图。但是有一个奇怪的行为。当我使用函数禁用它后重新启用窗口时CWnd::EnableWindow,它拒绝绘制我在OnPaint函数中编写的内容。它改为绘制静态控件。

我同意有这种覆盖DrawItem和使用SS_OWNERDRAW样式的标准方法。但是有什么问题WM_PAINT呢?

0 投票
2 回答
579 浏览

winapi - 窗口未显示 WM_PAINT 中的线条

我对这个领域有点陌生,所以.. 据我所知,我在 WM_PAINT 中创建了一条线,但是我看不到这条线,因为窗口没有显示在全部。我有一个每 2 秒调用一次 WM_PAINT 的线程,但是每次运行程序后都没有显示任何内容。

提前致谢。

0 投票
3 回答
1185 浏览

c# - 无效成自己的位图

我希望在屏幕外将控件渲染到某个位图,以便我可以快速访问它。

不幸的是Control.DrawToBitmap,似乎绘制了调用它的整个控件,包括它的所有子控件。在内部,它向位图发出带有自备 DC 的 WM_PRINT 消息。然后将该临时位图传送到用户提供的位图。对我来说不可接受,我宁愿根据需要更新此位图,以便在需要位图时最小化我的性能损失。

在理想情况下,我希望表单表现得好像它在屏幕上可见(但它不能)。这意味着,如果某个控件的Text属性发生了变化,那么表单将部分失效。然后,捕获相关消息/事件将允许我为要绘制的表单指定我自己的 DC,或者将表单 DC 简单地 BitBlt 到我自己的。

我看过的一些方向:

  • PaintEventArgs参数 inOnPaint似乎包含一个成员 savedGraphicsState,也许它可以用来找出不需要失效的东西
  • 使表单可见但在屏幕区域之外。但是,控件不会被绘制。
  • 在窗口上手动调用 RedrawWindow(),同样的故事
0 投票
1 回答
494 浏览

c - WM_PAINT 的帧率

谁能告诉我,我怎样才能以每秒帧数获得 WM_PAINT 消息的帧率?我正在尝试制作软件渲染器,并且帧率对于调试非常重要。

0 投票
1 回答
315 浏览

c++ - 是什么导致 WS_TABSTOP 影响窗口绘制顺序?

在 WTL 中,CBitmapButton 不支持带有透明层的图片,例如 PNG。所以我自定义代码以使用 GDI+ 绘制 PNG,将其命名为 CPNGButton。但是在win XP上事情很奇怪。当按钮被其他窗口重叠时,按钮先接收 WM_PAINT,然后再接收父级,导致结果不正确。

在此处输入图像描述--->在此处输入图像描述

我检查资源并从按钮的模板中删除 WS_TABSTOP 属性,一切正常,父窗口首先接收 WM_PAINT,然后是按钮。是什么导致 WS_TABSTOP 影响窗口绘制顺序?

0 投票
3 回答
852 浏览

c++ - 什么可能导致我的 C++ win32 应用程序在后台运行?

我已经在这个应用程序上工作了至少 3-4 个月,最近它还没有工作。

它从今天开始,因为昨天它运行良好且平稳。现在它运行了,但窗口不可见(我检查了任务管理器中的进程列表,它正在运行)。我已经确定 ShowWindow(hwnd, nFunsterStil); 没有被意外删除,但它仍然存在。

我认为问题出在 WM_PAINT 上,因为这是我在程序停止工作时正在处理的问题。

这是我在编译并开始不可见时所拥有的:

现在我尝试删除其中的一些行,将整个块变成评论,甚至完全删除它,但它没有任何帮助。我知道我可能弄乱了电脑的内存。所以我的问题是:出了什么问题,我该如何解决?提前感谢您的帮助。

这是完整的消息开关:

以下是与制作窗户相关的部分:

0 投票
2 回答
2574 浏览

windows - DefWindowProc WinApi 的行为

有人可以解释为什么使用 DefWindowProc 一切正常,但如果我删除它,字符串“Hello windows”会出现在屏幕上,没有窗口和任何按钮?“UpdateWindow”向窗口过程发送WM_PAINT消息,为什么会显示文本但跳过创建窗口?

0 投票
1 回答
1881 浏览

winapi - GetDC 与 BeginPaint 性能注意事项

MSDN 和许多帖子都建议在 WM_PAINT 中使用 BeginPaint/EndPaint。我还看到很多地方表明如果在绘画中使用双缓冲,那么在 WM_CREATE 中初始化 DC 和内存分配并在 WM_PAINT 中重用这些句柄会更有意义。

例如,使用 BeginPaint,我通常会看到:

为了保存初始化和拆除,是否可以这样做:

所以我们只使用 EndPaint 来清除更新区域,但将绘图委托给先前创建的对象。

0 投票
1 回答
463 浏览

c# - 如何控制播放器的绘画

我正在尝试在实时视频上画一些东西。在我看来,最好的方法是处理 WM_PIANT 事件。

我的目的是让玩家先绘制,然后再绘制应用程序。这样我就可以在视频上画画了。这意味着我希望每次在我们需要在窗口上绘制新框架然后处理事件之前都得到通知。

我使用 DirectshowNet,所以我使用 C# 编程(我拥有 c++ API 的所有接口)。我了解图形管理器将某些窗口消息转发给视频渲染器,例如 WM_PAINT。

如何使播放器在应用程序之前而不是之后绘制框架?