Tag: ownerdrawn

在OwnerDraw模式下ListBox DrawItem HotLight状态?

我在我的WinForms应用程序中使用OwnerDrawFixed作为DrawMode用于自定义ListBox控件。 当用户将鼠标hover在列表框项目上时,我希望重新绘制ListBoxItem的背景(或执行其他操作),即在MouseMove … DrawItemState.HotLight永远DrawItemState.HotLight用于ListBox,所以我想知道如何模拟它,如何解决这个问题。

TreeView所有者在选择时绘制毛刺

我正在尝试向标准System.Windows.Forms.TreeView控件的元素添加一些图标。 我的计划只是改变树视图控件的标签区域,但它显示了一个奇怪的行为。 如果单击某个节点将其选中,则在按下鼠标按钮时,将使用突出显示颜色正确绘制背景。 但是,在我释放鼠标按钮之前,文本是错误的未选择颜色。 就像e.State在按下和释放鼠标按钮之间包含错误状态一样。 这是我正在做的事情:我使用this.DrawMode = TreeViewDrawMode.OwnerDrawText初始化,然后使用this.DrawNode += LayoutTreeView_DrawNode注册我的事件处理程序。 这是处理程序: void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { Color color = (e.State & TreeNodeStates.Selected) != 0 ? SystemColors.HighlightText : SystemColors.WindowText; TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis; TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, e.Bounds, color, flags); } 如果我将处理程序设置为默认情况… void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { e.DefaultDraw = […]

在ListView控件中闪烁(OwnerDraw,Virtual)

此问题可能被视为使用ownerdraw和virtualmode在listview中闪烁的后续行动。 我在Virtual mode有一个ListView控件,我尝试执行自定义绘图。 项目渲染通过以下方法覆盖完成: protected override void OnDrawItem(DrawListViewItemEventArgs eventArgs) 如引用的问题所述,自定义绘图会在鼠标hover事件上引入闪烁。 调试器告诉我这是由于过多的自定义绘制事件被触发而发生的。 现在 – 引用问题的接受答案告诉我们: 这是.NET的ListView中的一个错误,你不能通过双缓冲绕过它。 那么, 这些信息有多可靠? 这真的是一个错误吗? 或者我们可能只是试图切断部分消息并希望它不会改变可见行为? 这是真的,如果我在Virtual Mode,拥有我的所有者绘图例程的ListView Virtual Mode,我可以抑制这些Custom Draw事件,只在WM_PAINT执行我的绘图,或者,在某些情况下这可能是不正确的? System.Windows.Forms控件能够在不改变它的初始行为的情况下完成WM_PAINT所有绘制,有哪些先决条件?

如何使用C#(Windows窗体)启用控件的双缓冲?

如何使用C#(Windows窗体)启用控件的双缓冲? 我有一个面板控件,我正在绘制内容,也是一个所有者绘制的选项卡控件。 两者都有闪烁,所以如何启用双缓冲?

C#:TreeView所有者使用ownerdrawtext进行绘制,并在单击节点时使用奇怪的黑色突出显示

我将DrawMode设置为OwnerDrawText并添加到DrawNode事件,添加我的代码以我想要的方式绘制文本,并且一切正常,除了选择节点时突出显示的一些奇怪的黑色选项。 没问题,我添加了逻辑来检查节点的状态是否突出显示并绘制了我自己的突出显示,除了在单击节点时添加黑色突出显示,而不仅仅是选中…一旦鼠标按钮突出显示我的矩形突出显示被释放但确实被吸引并眨眼……这很烦人。 :/ 显然我忘了真的问我的问题……如果不完全处理绘图,怎么会去除选择?