更改对齐方式后如何重绘列表控件?
Posted
技术标签:
【中文标题】更改对齐方式后如何重绘列表控件?【英文标题】:How can a list-control be redrawn after changing its alignment style? 【发布时间】:2012-03-09 17:29:02 【问题描述】:我正在尝试找出一种在更改对齐样式 (LVS_ALIGNTOP
/ LVS_ALIGNLEFT
) 后刷新/更新/重绘列表控件的方法。
如果我将样式从图标/小模式更改为其他样式,然后再改回来,它有时会起作用(仅在单击时,以编程方式更改似乎即使有延迟也不起作用)。即便如此,这充其量也很笨拙(更不用说丑陋/闪烁),所以我更愿意找到更好(更合适,更正确?)的方法。
我尝试了列表控件的UpdateWindow
、RedrawWindow
、Invalidate
、RedrawItems
、Update
...除了更改显示模式之外似乎没有任何效果。
【问题讨论】:
你有没有得出结论? 【参考方案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();
【讨论】:
你读过这个问题吗?我明确表示我已经尝试过了。以上是关于更改对齐方式后如何重绘列表控件?的主要内容,如果未能解决你的问题,请参考以下文章