在实际应用中,CTabCtrl或者CListCtrl在插入大量数据时界面绘制变发生剧烈闪烁,并且插入效率较慢。利用SetRedraw可以解决此问题。实际测试CTabCtrl插入上千条记录未优化前需要30~40秒,优化后需要1~2秒。
摘自百度百科
CWnd::SetRedraw void SetRedraw( BOOL bRedraw = TRUE ); 参数: bRedraw 指定了重画标志的状态。如果这个参数为TRUE,则重画标志被设置;如果为FALSE,则该标志被清除。 说明: 应用程序调用SetRedraw以允许重画变化或防止变化被重画。
这个成员函数设置或清除重画标志。当重画标志被清除时,在每次变化以后,内容不会更新,直到重画标志被设置才会重新绘出。例如,如果一个应用程序需要在列表框中加入几个项,则可以清除重画标志,加入项,然后设置重画标志。最后,应用程序可以调用Invalidate或InvalidateRect成员函数以使列表框被重画.
相关代码:
class CWndRedraw
{
public:
CWndRedraw(CWnd *pWnd)
{
m_pWnd = pWnd;
if(m_pWnd)
{
m_pWnd->SetRedraw(FALSE);
}
}
~CWndRedraw()
{
if(m_pWnd)
{
try
{
m_pWnd->SetRedraw(TRUE);
}
catch (...)
{
// throw no exception in destructor
}
}
}
private:
CWnd* m_pWnd;
};
分享到:
相关推荐
dw_list.Retrieve( ) setredraw() 的使用方法,一般情况是 控件名.setredraw(Boolean)
1. windows消息WM_ 2. WM_NULL = $0000; 3. WM_CREATE = $0001; 4. 应用程序创建一个窗口 5. WM_DESTROY = $0002;...19. WM_SETREDRAW = $000B; 20. 设置窗口是否能重画 21. WM_SETTEXT = $000C;
1\在开发项目时,使用到了 listcontrol 控件,就一些问题,做一下备注,以备以后使用 ... 来禁止 重画,这样可以提高效率.当添加完成后,可以 使用 .SetRedraw(true); 重新启用重画 (5) 添加项目: m_List_IpList.Inse
PB9框架,适合正在PB道路上摸索的人。讲解PB最初框架的搭建
WM_SPOOLERSTATUS= $002A //每当打印管理列队增加或减少一条作业时发出此消息 WM_DRAWITEM= $002B //当button,combobox,listbox,menu的可视外观改变时发送此消息给这些空件的所有者 WM_MEASUREITEM= $002C //当...
调用函数后,要使函数效果显示出来,需将本控件或拥有控件的窗口setredraw(true)一下(多方努力,还没办法把这个缺陷解决)。 setbktext(int mode, int bands, int rs, int gs, int bs, int re, int ge, int be) 设置...
改变enable状态WM_SETREDRAW = 11;设置窗口是否能重画WM_SETTEXT = 12;应用程序发送此消息来设置一个窗口的文本WM_GETTEXT = 13;应用程序发送此消息来复制对应窗口的文本到缓冲区WM_GETTEXTLENGTH = 14;得到与一个...