【问题标题】:How can a list-control be redrawn after changing its alignment style?更改对齐方式后如何重绘列表控件?
【发布时间】:2012-03-09 17:29:02
【问题描述】:

我正在尝试找出一种在更改对齐样式 (LVS_ALIGNTOP / LVS_ALIGNLEFT) 后刷新/更新/重绘列表控件的方法。

如果我将样式从图标/小模式更改为其他样式,然后再改回来,它有时会起作用(仅在单击时,以编程方式更改似乎即使有延迟也不起作用)。即便如此,这充其量也很笨拙(更不用说丑陋/闪烁),所以我更愿意找到更好(更合适,更正确?)的方法。

我尝试了列表控件的UpdateWindowRedrawWindowInvalidateRedrawItemsUpdate...除了更改显示模式之外似乎没有任何效果。

【问题讨论】:

  • 你有没有得出结论?

标签: listview mfc clistctrl listctrl listcontrol


【解决方案1】:

我已经成功使用 CListCtrl.Update() 方法解决了这个问题。

即:

for (int z=0;z<m_listCtrl.GetItemCount();z++)
{
    m_listCtrl.Update(z);
}

【讨论】:

  • 好吧,我已经表明我已经尝试过Update。我真的不记得遇到这个问题时我在做什么项目,但我会尝试找出并测试是否可能在循环中执行它是诀窍(当然假设我没有已经)。
  • 好吧,我找到了这个项目,我循环尝试了它,但它不起作用;列表控件保持之前的对齐方式。
【解决方案2】:

找出你必须做的,

m_listCtrl.Arrange(LVA_DEFAULT);

您可能需要将LVA_DEFAULT 更改为您的特定要求。见this

【讨论】:

    【解决方案3】:
    RedrawItems(0, GetItemCount() - 1);
    UpdateWindow();
    

    【讨论】:

    • 你读过这个问题吗?我明确表示我已经尝试过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2020-05-27
    相关资源
    最近更新 更多