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

delphi - Delphi 6 TListBox OnMeasureItem() 和 OnDrawItem() 从未调用 lbOwnerDrawVariable() 列表框

我有一个 Delphi 6 应用程序,其 TListBox 控件设置为 lbOwnerDrawVariable。在运行时,我将单个字符串添加到列表框中。我有 OnMeasureItem() 和 OnDrawItem() 的事件处理程序,我在每个事件处理程序的第一行代码上设置断点。但是,它们都没有被调用。不止一次。即使我在列表框上进行显式刷新重绘调用也不行。

这确实是基本的东西,那么我做错了什么会阻止调用这些事件处理程序并随后破坏我的所有者绘制代码?单个字符串确实正确显示在列表框中。我加入了一个 OnClick() 事件处理程序,只是为了看看它是否有效。

0 投票
1 回答
1277 浏览

delphi - 我可以强制 Delphi 6 TImageList 位图将其透明像素绘制为某种颜色吗?

我有一个 Delphi 6 应用程序,它在 TListBox 行中绘制图标以及一些文本。的TListBox样式设置为lbOwnerDrawVariable。我遇到的问题是选择项目时。列表框用于更改所选行的背景颜色的突出显示颜色使图标看起来很糟糕,因为图标具有透明像素(我基于可见证据的假设),并且这些像素被更改为背景颜色,从而破坏图片。有没有一种简单的方法可以强制将透明像素绘制成某种颜色,这样我就可以消除这个问题?我正在使用该方法在画布TImageList.Draw()上绘制图标。TListBox

0 投票
3 回答
19827 浏览

delphi - 如何以不同的颜色绘制选定的列表框项?

是否可以更改 TListBox 中的项目选择焦点颜色和文本颜色?

当项目中未启用主题,或者列表框样式设置为所有者绘制时,项目周围的选择被涂成蓝色,我相信这是由系统的外观设置全局定义的。

我想将所选项目的颜色更改为自定义颜色。

举个例子,结果是这样的:

在此处输入图像描述

请注意,最后一个列表框已在 Paint 中进行了修改以说明示例。

0 投票
1 回答
2597 浏览

delphi - 在 Delphi 中制作透明的 TListBox

一个透明的 TListBox:

我有我的 DrawItem:

一个问题是 ListBox 不能正常工作,项目消失,闪烁......

我不能合并 2 个程序的代码而只留下一个(被覆盖的一个或我的):

或者

我怎样才能让一切正常,列表框是透明的,项目被正确绘制?

0 投票
1 回答
1621 浏览

c++ - 如何为所有者绘制变量 CListBox (MFC) 设置高度

我有一个可变高度所有者绘制 ListBox 控件。当我调用 AddString 时,会发送一条 MeasureItem 消息,要求我告诉 Windows 项目的大小。问题是,代码还没有机会调用 SetItemData,所以代码还不能确定大小。

我试过调用 SetRedraw(FALSE) 希望这会推迟测量请求,但没有运气。

那么如何将一个项目添加到 CListBox 并同时获取传入的项目数据呢?我尝试过使用和不使用 LBS_HASSTRINGS。不知道还有什么可以尝试的。

0 投票
1 回答
2010 浏览

c++ - MFC 自定义 OnPaint 未被可靠调用

我继承了一个 MFC 应用程序,它有一个窗口,其中有几个所有者绘制的小部件,这些小部件可以响应OnPaint并执行各种绘图。

我注意到,为了强制控件重绘以响应各种用户操作,有以下代码:

我认为这可以简化如下:

但是,在实践中,当我这样做时,控件有时会绘制,但有时不会绘制。具体来说,当我与窗口中的控件交互时,有时myControl最终只会画成纯灰色。我将代码改回更复杂InvalidateRect的样式,它再次运行良好。

为什么这里会有区别?

0 投票
0 回答
965 浏览

c++ - 如何为自绘列表框的未填充区域设置背景?

在为我的 CListBox 派生类处理 DrawItem 时,我将背景设置为自定义颜色。当列表框完全填满行时,这很有效,但是当它只包含 1-2 行并且它的高度允许它包含 10-20 行而没有滚动条时,有很大的区域不会调用 DrawItem。那里的背景仍然是默认的。我还需要覆盖哪个函数来更改该区域的背景?

0 投票
1 回答
1574 浏览

winapi - 为什么 WM_ERASEBKGND 有单独的消息

我一直不太明白为什么擦除背景会有单独的 Windows 消息。我看起来有点多余。当我创建了所有者绘制的按钮时,我总是从 WM_PAINT 内部擦除背景。有时我什至从 WM_ERASEBKGND 内部完成了所有的绘画并将 WM_PAINT 留空。两者似乎都工作正常。将绘画分为 2 个操作有什么好处吗?

0 投票
1 回答
5263 浏览

delphi - 简单的 TListView OwnerDraw 文本字体大小和颜色示例?

我正在尝试在报告模式下使用OnCustomDrawItem.

当我尝试更改 Canvas.font.color 时,这就是我所做的一切,我没有任何问题。

如果我设置canvas.font.size,我发现控件绘制的文本大小没有变化。

如果我尝试从 OnCustomDrawItem 中接管文本的绘制,我发现我做不到。我知道如何使用 OnCustomDraw 在背景区域进行绘制,但我想自定义绘制一个 listview ITEM,以便我可以设置文本的颜色和字体名称以及字体大小。

我知道在 ListView 所有者绘制的上下文中使用 Canvas 存在一些问题,并且您可以在 ListView 中执行的操作有一些限制。

0 投票
3 回答
2821 浏览

combobox - MFC:如何为所有者绘制渲染 Aero 风格的组合框?

我继承了一个大型 MFC 应用程序,其中包含一个CComboBox覆盖OnPaint. 目前,它的所有绘图都是手工完成的(使用线条和矩形),并呈现一个看起来明显是 Windows 98 风格的组合框。但是,它在其他方面工作得很好,并提供了许多我们所依赖的有用的自定义功能,并且重写整个控件可能不是一种选择。

我想对其进行现代化改造,以便OnPaint在可用的地方以 Aero 风格绘制(当现代主题不可用时回退到旧代码)。我已经使用我们拥有的其他一些自定义控件(例如按钮)完成了此操作,它非常适合我们的目的。我知道有一些微小的行为是不正确的,比如鼠标悬停时的柔和高光,但这对这个应用程序来说没什么大不了的。

我可以访问CVisualStylesXPckass,所以我已经有了基础设施来拨打电话OpenThemeDataGetThemeColor或者DrawThemeBackground很容易(通过LoadLibrary所以我们不强制 Vista 作为最小系统)。不幸的是,我不知道正确的调用顺序来获得带有主题适当边框和下拉按钮的漂亮组合框。

有人知道在这里做什么吗?