问题标签 [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 投票
1 回答
786 浏览

c++ - LPCWSTR 不会在 TextOut() 方法上正确转换

整个代码片段...

问题是我收到来自 Visual Studio 2012 的错误,告诉我“const char *”类型的参数与 LPCWSTR 类型的参数不兼容。这发生在这行代码上:

我尝试了转换((LPCWSTR)gTextObjs[i].s.c_str()),但显然这是非常错误的研究,因为每个字符数组操作一个字节到两个?"C4018: '<' : signed/unsigned mismatch"在此更改后还收到警告。我是 C++ 新手,考虑到转换错误,我对这个错误非常迷茫。

我已经查看了 SO 中的一些不同线程,但似乎没有任何东西适合这种特定情况(或者我只是不太了解这些线程与我的线程之间的相关性)。:[

另外,只是为了澄清......转换“有效”,但它会打印一些看起来很奇怪的日文/中文符号,而且总是不同的。

0 投票
3 回答
1933 浏览

c++ - WinAPI:在 WM_PAINT 中省略 BeginPaint 和 EndPaint 会导致 100% 的 CPU 使用率

在处理 WM_PAINT 消息时,我省略了 BeginPaint 和 EndPaint 调用,CPU 使用率飙升至 100%。为什么是这样?

我也在使用工作线程......但他们做了一些不同的事情,似乎对这个问题没有影响。

另外,我可以使用 GetDC() 中的设备上下文而不是 BeginPaint 吗?他们似乎有不同的价值观,所以我认为他们有不同的工作。

抱歉,如果我听起来像个白痴——我是 WinAPI、C++ 和一般逻辑世界的新手……

谢谢

0 投票
0 回答
159 浏览

c++ - 带有 WM_PAINT 消息的 NPP_HandleEvent

Mozilla 开发人员的文档说:

视窗

插件接收到 WM_PAINT 消息。WM_PAINT 的 lParam 参数包含一个指向 RECT 结构的指针,该结构指定更新区域的边界框。不过,有些插件会选择忽略此绘制矩形并始终更新整个插件窗口。另外,由于插件和浏览器共享同一个HDC,插件必须在HDC上保存当前设置,设置自己的环境,绘制自己,将HDC恢复到之前的设置。每当控件返回浏览器时,必须恢复 HDC 设置,无论是在从 NPP_HandleEvent 返回之前还是在调用与绘图相关的浏览器端方法之前。

这一定是一个客户RECT?

还是窗口的 RECT?

0 投票
2 回答
13623 浏览

c++ - C++ WinAPI TextOut() 更新文本

我正在使用 WinAPI 创建一个 Windows 应用程序。在处理窗口的消息时,我正在使用该TextOut()函数向用户显示更新的文本。WM_PAINT

如何更改TextOut()调用函数后打印的文本以及确定打印文本长度的最后一个参数?

我发现关于使用的一切都是TextOut()关于文本字体的。

0 投票
4 回答
11907 浏览

c++ - 为什么不手动发送 WM_PAINT

我已经读过我永远不应该WM_PAINT手动发送,而是应该打电话InvalidateRect,但是没有找到任何关于为什么不这样做的信息。那为什么不呢?

更新适用于InvalidateRect但不适用于SendMessage(WM_PAINT)

0 投票
1 回答
284 浏览

winapi - 为什么有时用空矩形调用 WM_PAINT?

我正在处理很多关于绘画的事情。目前我正在使用 WM_TIMER 来安排使用 InvalidateRect 的绘画。由于某种原因,WM_PAINT 经常被称为区域(0,0,0,0),所以基本上是一个空矩形。我试图将其解释为“整个窗口”,但它似乎导致了相当多的性能下降。为什么 Windows 会发送它呢?

0 投票
2 回答
696 浏览

c++ - 在窗口中绘画之前是否需要使更新区域无效

如果我使用 Direct2D,是否有必要在立即绘制(响应用户操作)之前使更新区域无效?还是打电话RenderTarget::BeginDraw()就够了?我需要在WM_PAINT消息之外快速重新绘制窗口的某些部分。如果我不使更新区域无效,有时窗口的整个客户区域会变黑,看不到任何图纸。但是,如果我确实使更新区域无效,系统WM_PAINT会在我验证更新区域之前发送一条消息,这会导致执行不必要的绘图操作。WM_PAINT如果我使用 Direct2D,我应该如何在消息处理程序之外实现即时绘图操作?

0 投票
2 回答
1083 浏览

c++ - 在 C++ 中使用多线程绘制多边形

我正在使用 C++ 在 WM_PAINT 事件中绘制多边形 (Polygon(dc, points, 3))。我有大量的多边形,所以我正在尝试实现多线程。我正在运行 VS2013,所以我包含了线程。我创建了一个要在线程上运行的函数:

例如我有三个线程。我将代码设计为每个线程呈现每个第三个元素的方式。例如,第一个线程渲染 0,3,6,9 个多边形,第二个线程渲染 1,4,7,10,最后一个线程渲染 2,5,8,11 个多边形。

这是我的 WM_PAINT 事件:

如您所见,我在循环中运行这些线程。然后我有另一个循环,每个线程的 Join() 方法都位于其中。这些线程将多边形绘制到同一个 HDC(我假设)。在主线程完成等待所有这些线程后,它会将后台缓冲区中的所有内容复制到主线程。但是问题是对象没有完全绘制。我的意思是不是所有的多边形都被绘制出来。图片的链接附在此处。请帮助我,为什么会这样?!

0 投票
2 回答
463 浏览

c - 处理 WM_PAINT

我在互联网上阅读了很多例子,但我仍然卡住了。我正在尝试处理发送到我的应用程序的 WM_PAINT 消息。

在我的应用程序中,我总是在同一个 DC 中绘制,名为g_hDC. 它完美地工作。收到WM_PAINT时,我只是尝试将 my 的内容绘制g_hDC到由BeginPaint. 我猜g_hDC包含我绘制的最后一个位图。所以我只想恢复它。

休息;

但它只是画了一个白色的矩形......我尝试了很多可能性,但没有任何效果。你能帮我么?

0 投票
1 回答
209 浏览

windows - Windows API:简单窗口无法正确重绘

我正在为 Windows API 开发 Lua 绑定。到目前为止,我已经能够创建一个带有列表框控件的基本窗口:

它创建并显示一个窗口,但该窗口没有正确重绘。从控制台输出中,我可以看到很多 WM_PAINT、WM_ERASEBKGND、WM_NCPAINT 等,我将它们传递给 DefWindowProc,但它似乎没有处理它们。

示例截图: 例子

当窗口第一次出现时,它要么拍摄它后面的任何图像(如本例所示),要么显示为纯灰色。当它被拖动时,它会保留该图像,并且任何拖动它的东西都会留下一个重影图像。(可以在标题栏上看到,在活动窗口周围我有一个白色的小按钮。)如果我将它拖出屏幕一点,它开始变得更加故障,但从未成功地重新绘制自己。

我尝试了各种处理 WM_PAINT、WM_ERASEBKGND 等的方法,但都没有任何效果。示例也没有显示正在处理的这些消息。我做错了什么,还是我需要做其他事情?