问题标签 [gdi]

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 投票
6 回答
19297 浏览

windows - 在 Windows 对话框中处理 WM_ERASEBKGND 时如何避免闪烁

我有一个调整大小的对话框。它还有一个自定义背景,我绘制它以响应 WM_ERASEBKGND 调用(当前是对 FillSolidRect 的简单调用)。

调整对话框大小时,会出现巨大的闪烁。为了尝试减少闪烁,我枚举了所有子窗口并将它们添加到剪切区域。这似乎有点帮助——现在闪烁在所有子控件中最明显,因为它们重新绘制。

如何在调整大小时使对话框无闪烁?我怀疑双缓冲必须发挥作用,但我不确定如何通过带有子控件的对话框来做到这一点(而不是让所有子控件都由所有者绘制或类似的东西)。

我应该注意,我使用的是 C++(不是 .NET)和 MFC,尽管欢迎纯基于 Win32 的解决方案 :)

注意:我尝试过但不起作用的一件事(不知道为什么)是:

0 投票
2 回答
3075 浏览

c - 应该包含什么库才能使用 TransparentBlt?

应该包含什么库才能使用 TransparentBlt?

这是链接到 Gdi32.lib 的 VC98 (Visual Studio 6)。(其他 GDI 函数,如预期的 BitBlt 链接),编译器编译时没有错误或警告。

即使包含 Gdi32.lib,链接器仍会返回此错误:

我错过了什么?

0 投票
1 回答
647 浏览

winapi - DrawFrameControl 中的 GDI 资源泄漏

似乎 DrawFrameControl() 创建了 Font 和 Brush 对象,将它们选择到 dc 中,并且没有删除它们。(根据 BoundsChecker 消息)。有没有人遇到过这样的事情?

0 投票
2 回答
4115 浏览

c# - 给定 IntPtr 句柄,更改 Window 背景颜色

在 c# 中,我有一个窗口句柄(一个 IntPtr ),我想更改该窗口的背景颜色。我怎样才能做到这一点?

我可以像这样获取该句柄的 GDI 图形对象:

图形图形 = Graphics.FromHwnd(theHandle);

所以我应该能够以某种方式改变背景颜色?

我还想确保即使在窗口移动、调整大小、重新绘制等之后背景颜色仍然存在。

0 投票
2 回答
2283 浏览

c++ - 替换 CDC 矢量图形的快速库

我有一个成熟的 MFC C++ 应用程序,它显示在屏幕上并使用 Win32 GDI 上的 CDC 包装进行打印。虽然它多年来一直在优化,但我想用更快的东西替换它。图形包括渲染的三角形表面模型、复杂的折线和多边形以及大量文本。它需要满足以下条件;

  • 显示的矢量数量可能非常大。例如,单个曲面三角形在渲染时可能会生成数字线和实心填充。目前,这些信息没有存储在任何地方,它是动态生成和绘制的。SDK 应该支持限制缓冲向量的总数,否则容易耗尽内存。

  • SDK 应该能够呈现到任何 CWnd 派生类,包括 CView 和 ScrollView 类。

  • SDK 应该支持打印到任何 Windows 打印设备,

  • SDK 应该足够低级,以使来自低级 CDC/GDI 调用的端口相对简单。

  • 开源总是很好,但一次性费用高达 2000 美元,可选升级/支持也可以。每个用户的许可费用是不可接受的,

  • 访问源代码将是一个很大的好处,特别是在 Windows CE / Mobile 上运行部分 SDK 的想法。

  • 我目前处理自己的 3d 到 2d 视口管理。如果没有合适的低级 SDK,则更高级别的 SDK 必须能够很好地处理 3d,并在 32 位 Windows 平台上处理数百万个三角形、多边形和文本实体。

有什么建议么?在您提出的建议中列出具体的优缺点将不胜感激。

0 投票
2 回答
933 浏览

visual-c++ - 通过单击和拖动避免绘制事件的重叠、拱形线?

我目前是一名学生,正在尝试设计一个 Visual C++ 应用程序,以允许我直观地插入一个有向图,以便使用该图的矩阵创建一个文本文件。此时,我创建了一个 onClick 事件来创建节点,并使用表单的 Paint 事件来绘制节点。我还插入了条件以避免节点重叠。

我目前正在创建节点之间的链接。我遇到的问题是连接两个节点的线穿过另一个节点。我认为编写一个算法来检测重叠并计算线需要弯曲多少以避免在这种情况下过于繁琐。

因此,我考虑创建一条可以由用户通过单击并向左或向右拖动来弯曲的线,但是我在查找有关如何执行此操作的任何教程时遇到了问题。因此,如果有人不得不在项目中引入这种拱形线,或者知道我可以在哪里找到有关这方面的一些信息,我将不胜感激。

提及:

  1. 请不要推荐任何花哨的图形库来执行此操作,因为我对为此程序安装 3rd 方的东西不感兴趣。我想插入代码的函数被命名为 form1_onPaint,所以我想严格遵守 C++ 标准库。
  2. 我知道我说过我有兴趣通过单击和拖动来拱起一条线,但是如果有人可以提出另一种可行的解决方案,例如检测 onPaint 事件中重叠的功能或任何其他可能用于解决此问题的功能,它会有很大帮助。
0 投票
1 回答
932 浏览

windows - 使用不受支持的 Win32 GDI 笔模式有问题吗?

MSDN文档(有些)清楚地说明了有关 GDI Pen 的以下两个事实:

  1. 化妆笔(通过 CreatePen 或 ExtCreatePen w/ PS_COSMETIC 创建)必须为 1 个单位宽(嗯,<= 1,但我们不要去那里)。

  2. 几何 (ExtCreatePen w/ PS_GEOMETRIC) 笔必须是实心的(仅限 PS_SOLID,无 PS_DASH 等)。然而,它们可以画出更粗的线条。 这在我上面的链接中清楚地记录为只有 9 倍的限制(我很愚蠢)。为了我的辩护,我的代码中的(坏的)评论和(破碎的)逻辑让我不相信。其他一些谷歌搜索的文章一定是只针对 Windows 9x 编写的。

为什么我可以违反这些规则并让 GDI 愉快地用这些笔画画?

我可以创建胖(例如宽度 = 10)化妆笔虚线几何笔。哎呀,我可以创建一个粗大的虚线几何笔!

这些笔似乎通常可以正常工作。我看到的唯一问题是在折线中,当我通过非常大的点数组时 - 它渲染线条的速度非常慢。但是,Polyline 通常对大型阵列的行为很奇怪 - 它与笔的行为不同。(我的其他折线问题可能是另一个问题......)

使用宽化妆笔或带有图案的宽几何笔是否安全?

0 投票
3 回答
5782 浏览

c# - 从图像创建 1bpp 掩码

如何在 C# 中使用 GDI 从图像中创建每像素 1 位的掩码?我试图从中创建蒙版的图像保存在 System.Drawing.Graphics 对象中。

我见过在循环中使用 Get/SetPixel 的例子,它们太慢了。我感兴趣的方法是只使用 BitBlits,就像这样。我只是无法让它在 C# 中工作,非常感谢任何帮助。

0 投票
4 回答
2220 浏览

c++ - Windows GDI:水平/垂直 DPI

在 Windows 下(通过使用 ::GetDeviceCaps)获取屏幕的 DPI 时,水平值是否始终与垂直值相同?例如:

这些价值观有什么不同吗?

0 投票
6 回答
1045 浏览

c# - 跟踪和降低 GD 句柄的最佳方法是什么?

跟踪和降低 GDI 窗口句柄的最佳方法是什么。.