问题标签 [ownerdrawn]

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 回答
1094 浏览

c# - 在 C# 中使用 OwnerDraw ListView 进行字符对齐

我正在尝试实现一个功能类似于 Firefox Awesome Bar 的 .NET 控件。为此,我试图在 ListView 中显示的搜索结果中加粗并加下划线搜索字符。我已经设置了 OwnerDraw,并且正在使用 Graphics.MeasureCharacterRanges 来确定字符的大小。我遇到的问题是从该方法传回的值并不总是完美的。我最终会在这里和那里有一些额外的像素或两个彼此太接近的字符。有简单的解决方法吗?另一种使用不同字体设置绘制同一个单词不同部分的方法?

0 投票
1 回答
763 浏览

c# - DrawItemEventArgs 的“索引”属性有时会变为负数

我有一个所有者绘制的列表框控件。

问题是有时传递给我的 DrawItem 事件处理程序的 DrawItemEventArgs 参数的 Index 属性为“-1”。这是我的不道德修复:

我想知道通常是什么导致将负索引传递给处理程序。

0 投票
1 回答
1193 浏览

c# - (多层)嵌入式 TabControls 错误的自定义绘图

我有一个具有 3 层深的选项卡控件的 winform 应用程序。我正在使用下面的类动态地为选项卡着色。当它为嵌入的 tabcontrol 着色时,它会很合适。

我需要为那些做一些不同的事情吗?如果我注释掉对 tabRenderer 的嵌入式表单调用,那么我不会收到这些错误。我没有正确处理我的 TabRenderer 对象吗?

可能完全是另外一回事吗?我嵌入选项卡控件的方式?

我的程序目前看起来的一个例子在这里 -->


(来源:ggpht.com
来自DevFiles

如您所见,有 3 层选项卡控件。这在程序中发生了两次,都导致了上述错误。因为有 5 个选项卡控件,所以总共有 6 次对 tabRenderer 的调用。1 个顶级,3 个二级和 2 个三级。

用于为选项卡控件着色的代码:

这就是我所说的:

0 投票
4 回答
2503 浏览

c# - 滚动时所有者绘制 ListView“拖尾”

我有一个所有者绘制的 ListView,当我滚动时它会“涂抹”。它只影响最后显示的项目,因为它移动到列表的可见区域......

看起来像:

呸呸呸

_

...已全部绘制在彼此相距 1 个像素的顶部。DrawItem 事件中的代码形式为

我完全被难住了。任何想法不胜感激!戴夫

0 投票
1 回答
15112 浏览

c# - C#:TreeView 所有者绘图与 ownerdrawtext 和单击节点时奇怪的黑色突出显示

我将 DrawMode 设置为 OwnerDrawText 并附加到 DrawNode 事件,添加了我的代码以按照我想要的方式绘制文本,并且在选择节点时除了一些奇怪的黑色选择突出显示之外,所有工作都很好。

没问题,我添加了逻辑来检查节点的状态是否被突出显示并绘制了我自己的突出显示,除了在单击节点时添加黑色突出显示,而不仅仅是选择...一旦鼠标按钮,突出显示被我的矩形绘制被释放但确实被吸引并眨眼……这很烦人。:/

显然我忘了问我的问题......如何在不完全处理绘图的情况下摆脱选择?

0 投票
2 回答
815 浏览

showmodaldialog - 64 个 ownerdraw createwindow 按钮的限制

我想创建一个包含 256 个彩色按钮的数组,所有者为使用 Visual Studio 对话框设计工具创建的对话框绘制扩展样式。我在对话过程中向 WM_INITDIALOG 消息处理程序添加了一个循环来执行此操作:

我为 WM_CTLCOLORBTN 消息添加了一个消息处理程序。

它或多或少有效,但只显示前 64 个按钮。我打算使用不同的画笔为每个按钮着色,但对于调试用途,我替换了一个定义明确的画笔。我已经调试了代码并对每个按钮的 x/y 坐标和 hMenu createwindow 调用中提供的 ID 是正确的感到满意。我看到所有 256 个按钮都在 WM_CTLCOLORBTN 处理程序中着色。我包括了一项检查以确保 createwindow 调用不返回失败 (NULL)。通过在 createwindow 调用中交换 x/y 参数,我可以获得 4 行 16 个按钮或 4 列 16 个按钮。

如果我从 createwindow 调用中删除 BS_OWNERDRAW 位,则会绘制所有 256 个按钮。

就好像 BS_OWNERDRAW 有 64 个按钮的限制 :-(

任何帮助将不胜感激!

TIA,迈克

0 投票
1 回答
1451 浏览

.net - 展开时重绘组合框项目

我有一个带有绑定组合框的 .net 3.5 windows 应用程序。我已经覆盖了 DrawItem 事件以根据特定条件为单个项目的背景着色。我有异步线程正在运行,它更新条件值并调用 Invalidate() 以使组合框重绘。

这一切都很好,除了组合框展开时 - DrawItem 只为列表中突出显示的项目调用。其他项目仅在用户执行某些操作时刷新,例如将鼠标悬停在列表中的另一个项目上或单击不同的控件。我希望其他项目在列表打开时自动重绘。我该如何做到这一点?可能吗?

谢谢

编辑:我确定在扩展列表中突出显示的任何项目都会在主组合框显示中重新绘制。列表中的任何项目都不会在控件的展开部分中重绘。

编辑:这是一个精简的示例表单。对于任何想要测试的人,您应该能够创建一个新的 Windows 窗体应用程序并将其添加到一个新的类文件中,它应该可以构建。

要重现该行为,请单击“检测”按钮,然后打开组合框并将鼠标悬停在 COM1 上。测试结果将按 1,3,2 的顺序完成。您可以看到,当组合框打开时,COM3 保持黄色,直到您将突出显示移到它上面然后关闭。

0 投票
2 回答
1927 浏览

c++ - CStatic 自定义控件

我正在尝试创建一个自定义控件CStaticvc++遇到一些问题。

我最初只是使用带有样式的CStatic控件。SS_BLACKRECT在我需要在控件上按需显示图像之前,这对这种情况很有用。

我弄清楚了将图像实际绘制到控件上的所有后勤工作,但我似乎无法弄清楚如何在不干扰其他事情的情况下这样做。

基本上,我希望控件在大多数情况下都能正常CStatic使用该SS_BLACKRECT样式。

然后我需要能够调用一个方法,让它在控件上绘制图像。我正在使用绘图并在方法和方法GDI中都尝试过但没有成功。我可以让它在其中绘制,但是当我调用基础时,它会在我的图像上绘制。OnPaint()DrawItem()OnPaint()CStatic::OnPaint()

我需要能够让它像平常一样绘制,然后只是在上面放一个图像。当我尝试在该DrawItem()方法中执行此操作时,我遇到了问题,因为显然它不是使用SS_BLACKRECT样式进行绘制,而是在等待我按预期绘制控件。

我想我想我正在寻找的是三件事之一。GDI在基本OnPaint()方法完成后使用的一种绘制方法。一种让控件绘制默认SS_BLACKRECT样式然后绘制OWNERDRAW图像的方法。或模仿绘图的代码SS_BLACKRECT

最后一个可能是最简单的,但我只是不知道我需要设置的所有东西来绘制CStatic像默认 DrawItem 这样的控件。

0 投票
1 回答
832 浏览

c# - 列表框控件所有者绘制问题(向列表框项添加编辑控件)

当用户选择一个项目时,我正在为列表框(winforms 2.0)使用所有者绘制变量样式我想在该单元格中绘制一个编辑控件这是否可行不是下拉菜单,而是一个实际的编辑控件出现在单元格或项目中谢谢

0 投票
2 回答
5988 浏览

c# - ListBox DrawItem HotLight 在 OwnerDraw 模式下的状态?

OwnerDrawFixed在我的 WinForms 应用程序中用作自定义 ListBox 控件的 DrawMode。

当用户将鼠标悬停在列表框项目上时,我想重新绘制 ListBoxItem 的背景(或执行其他操作),即在 MouseMove ...

DrawItemState.HotLight从不适用于 ListBox,所以我想知道如何模拟它,如何解决这个问题。