- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在将一些代码从 Windows 移植到 XLib。在 Windows 代码中,我可以通过调用 InvalidateRect
然后处理相应的 WM_PAINT
消息来强制重绘。但是,我无法找到如何在 X11/XLib 中执行此操作。我看到有一条 Expose
消息,但不确定这是否是同一回事。
如果重要的话,我需要执行此操作以强制窗口以某个基于 OpenGL 的程序的帧速率呈现。
最佳答案
稍微扩展 BЈовић 给出的有用答案,
使用原始 Xlib,您可以随时在单个线程中绘制,因为每个 Xlib 函数都指定了完整的显示、窗口和上下文。 AFAIK,有了多线程,所有的赌注都没有了。
如果您在桌面环境中,您还必须有一个 Expose 事件处理程序,并为这些事件选择。即使您正在编写全屏程序,拥有一个也不会有什么坏处。
大多数工具包都没有那么灵活,只能绘制指定的事件处理程序(但在许多其他方面使用起来更好)并且有一些与 Windows InvalidateRect 等效的东西。在原始 Xlib 中,您可以通过向自己发送一个 Expose 事件来获得相同的效果。这样做不会导致任何真正的性能问题,并且会使代码更容易被其他程序员理解,并且更容易移植,所以您不妨这样做。
还有 XClearArea 和 XClearWindow 函数会为您生成 Expose 事件,但它们会先用背景色删除部分/全部,这可能会导致闪烁。
使用 OpenGL 会变得有点复杂,因为您还必须使用 GLX。我在网上有一个非常简单的 OpenGL/Xlib 程序 http://cs.anu.edu.au/~hugh.fisher/3dteach/这可能是一个有用的例子。
关于c++ - 相当于 X11 中的 "Invalidate Rect"/"WM_PAINT",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027993/
我的自定义绘图区的 WM_PAINT 看起来像这样: // TRUE to clear the background if (GetUpdateRect(hwnd, &r, TRUE) == 0)
我一直在玩 uni 的 Windows api,但在初始创建后我无法让窗口消息调用 WM_PAINT。它在创建窗口时调用它,但不是在创建之后。 所有其他消息都会被调用!只是无法调用 WM_PAINT。
我经常画画。目前我正在使用 WM_TIMER 来安排使用 InvalidateRect 的绘画。由于某种原因,WM_PAINT 经常被称为区域 (0,0,0,0),因此基本上是一个空矩形。我试图将其解
当我隐藏窗口时,图形的一部分被删除。我使用 cout 来显示我的代码正在运行的位置,似乎每个函数都已执行,但图像没有重绘 case WM_PAINT:{ hDC = BeginPain
有人能告诉我如何获得 WM_PAINT 消息的帧速率(以每秒帧数为单位)吗?我正在尝试制作一个软件渲染器,帧率对于调试非常重要。 最佳答案 这个问题之前被问过here 。作为附加提示,您可以使用动态分
我在互联网上阅读了很多示例,但我仍然陷入困境。我正在尝试处理发送到我的应用程序的 WM_PAINT 消息。 在我的应用程序中,我总是在同一个 DC 中绘制,名为 g_hDC。它工作完美。当收到 WM_
我正在尝试编写一个窗口过程,仅在单击开始按钮时调用窗口中矩形的动画,并在单击停止按钮时停止。 我试过这样做: LRESULT CALLBACK WindowProcedure(HWND hWnd, U
我想“拦截”其他进程聊天框的 WM_PAINT 消息。功能:GetMessage(msg, hwnd, 0, 0) 似乎很完美,但我没有收到任何消息(我作为 super 用户尝试过)从现在开始,我的
在这篇文章中About Messages and Message Queues ,据说 WM_PAINT 是一种排队消息。 排队的消息 Whenever the user moves the mous
WM_PAINT 究竟是什么时候被调用的?我试图创建一个基于对话框的老虎机应用程序,但我遇到了几个逻辑问题。我的申请将包括: “旋转”按钮 退出按钮 三个 BMP 图像显示旋转结果(硬币/心/士兵)
我读到我永远不应该手动发送 WM_PAINT 并且应该调用 InvalidateRect 但没有找到任何关于为什么不这样做的信息。那为什么不呢? update 适用于 InvalidateRect 但
我有 MSVC 2019、vc142 x64、SDK 10.0.18362.0、WINAPI 游戏项目、已启用 JIT 调试、_DEBUG被定义为。我用assert()来自标准库#include 。
我创建了一个父窗口,它有许多子窗口,例如按钮、静态文本等。它们都是可见的并且工作没有任何问题,但是当我向窗口回调添加一段代码时它们全部消失+我看不到我刚刚尝试从函数中绘制的线。 如何解决这个问题? c
我有一个神秘的 WM_PAINT 消息被无缘无故地发送到一个窗口,我无法理解。我正在使用我的一些代码发送一条 WM_PAINT 消息- InvalidateRgn(graphwin_hwnd,NULL
我正在创建 Win32 控件: m_progress = CreateWindowExW(0, PROGRESS_CLASSW, L"ProgressBar", WS_VISIBLE | WS_CHI
这是针对 C++ - win32 的。基本上,我已将图像 (bmp) 从文件加载到 HBITMAP 中,并将其位 block 传输到主窗口的设备上下文。 如果我想更改图像,我该如何再次调用它? 我调用
我正在尝试使用带有 wm_paint 和 wm_printclient 的 SendMessage 捕获游戏窗口。 我已经使用 PrintWindow 成功地做到了,但是游戏可以在图形引擎之间切换,对
简介: 我决定在 MS Visual Studio 2008 中用 C++ 做一个测试项目来测试纯 WIN32 中的一个小程序,关于绘制位图作为窗口背景。 问题: 窗口应该有灰色画笔和在其客户区拉伸(
在 TextOut 行的这段代码中遇到一些问题,它说: error: cannot convert 'std::string* {aka std::basic_string*}' to 'LPCSTR
有没有办法在所有 WM_PAINT 调用完成后调整大小?这样我就可以自动调整我的窗口大小以适应我绘制的任何内容,因为最初我的窗口大小被定义为特定大小,可能会有未绘制的剩余空间,我如何删除这些剩余空间?
我是一名优秀的程序员,十分优秀!