我使用标准的CListCtrl 控件 .
建立在Dialog 上,在窗口缩放时无闪烁.
可在我继承的CWnd 的窗口上缩放是闪烁严重.我建立的 CEdit 窗口无闪烁.是不是缺少参数呀.帮忙看看:
m_Edit.Create(WS_VISIBLE|WS_CHILD,CRect(0,10,200,30),this,100); //无闪烁 if(m_ListSearchContent.Create   (LVS_SHOWSELALWAYS|LVS_NOCOLUMNHEADER|LVS_REPORT|LVS_SHAREIMAGELISTS|WS_VISIBLE|WS_CHILD,
CRect(0,50,200,300),this,LISTSEARCHCONTENT) == -1)
return -1;
m_ListSearchContent.ModifyStyleEx(0,WS_EX_CLIENTEDGE  );
m_ListSearchContent.SetExtendedStyle(LVS_EX_FULLROWSELECT);

解决方案 »

  1.   

    你重载的窗口里的OnPaint都做了什么处理?
      

  2.   

    窗口缩放时,ListCtrl控件大小释放跟着变化?如果ListCtrl大小始终不变,可以给窗口设置WS_CLIPCHILDREN风格;如果ListCtrl也要变化,可以给ListCtrl加上LVS_EX_DOUBLEBUFFER扩展风格。
      

  3.   

    sys0000:
     我的OnPaint 画背景.什么也不做也不行 
      

  4.   

    cnzdgs:
     我加 WS_CLIPCHILDREN风格了.我试了.不行 .可在对话框上就没有问题呀
      

  5.   

    WS_CLIPCHILDREN风格是加在窗口上了吗?不要加在ListCtrl控件上。另外你有没有自己调用Invalidate刷新ListCtrl控件?
      

  6.   


    int CSearchTelHistory::Create(CRect& rect,CWnd* pParentWnd)
    {
    return CChildWndBase::Create(NULL,0,WS_CHILD | WS_CLIPCHILDREN , rect,pParentWnd);
    }
    int CSearchTelHistory::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CChildWndBase::OnCreate(lpCreateStruct) == -1)
    return -1; // TODO:  在此添加您专用的创建代码 m_tree.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,100,100),this,101);
    m_tree.InsertItem("sld");
    if(m_ListSearchContent.Create(LVS_SHOWSELALWAYS|LVS_NOCOLUMNHEADER|LVS_REPORT|LVS_SHAREIMAGELISTS|WS_VISIBLE|WS_CHILD,
    CRect(0,0,0,0),this,LISTSEARCHCONTENT) == -1)
    return -1;
    m_ListSearchContent.ModifyStyleEx(0,WS_EX_CLIENTEDGE |LVS_EX_DOUBLEBUFFER );
    m_ListSearchContent.SetExtendedStyle(LVS_EX_FULLROWSELECT);


    CBitmap pbmp; m_ImageSearchContent.Create(16,24,ILC_MASK|ILC_COLORDDB,4,1); 
    pbmp.Attach((HBITMAP)::LoadImage(NULL,".\\res\\CallState.bmp",
    IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
    m_ImageSearchContent.Add(&pbmp,RGB(249,249,249));
    m_ListSearchContent.SetImageList(&m_ImageSearchContent,LVSIL_SMALL); m_ListSearchContent.InsertColumn(0,"",0,100);
    RefurbishContent();
    return 0;
    }void CSearchTelHistory::OnSize(UINT nType, int cx, int cy)
    {
    CChildWndBase::OnSize(nType, cx, cy);
    // TODO: 在此处添加消息处理程序代码
    m_rcListSearchContent.SetRect(0,50,cx,cy); if(::IsWindow(m_ListSearchContent.m_hWnd))
    {
    m_ListSearchContent.MoveWindow(m_rcListSearchContent,0);
    m_ListSearchContent.SetColumnWidth(0,m_rcListSearchContent.Width()-6);

    }
    }
    //基类的Create
    int CChildWndBase::Create(LPCTSTR sCatpion,DWORD dwStyleEx,DWORD dwStyle,CRect rect,CWnd* pParentWnd)
    {
    HWND hWnd;
    CString strWndClass=AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW),GetSysColorBrush(COLOR_WINDOW),NULL); if(pParentWnd==NULL)
    {
    hWnd=NULL;
    }
    else
    hWnd=pParentWnd->GetSafeHwnd(); return CreateEx(0,strWndClass,NULL,dwStyle,rect.left,rect.top,rect.Width(),
    rect.Height(),hWnd,NULL,NULL);}
      

  7.   

    只是显示的内容闪烁.不是整个列表框闪烁,WS_CLIPCHILDREN风格有效了.去掉这个风格.整个列表框都闪烁
      

  8.   

    if(::IsWindow(m_ListSearchContent.m_hWnd)) 

    m_ListSearchContent.MoveWindow(m_rcListSearchContent,0); 
    m_ListSearchContent.SetColumnWidth(0,m_rcListSearchContent.Width()-6); 

    m_ListSearchContent就是CListCtrl的对象吧?这段代码就会引起ListCtrl刷新,可以加上判断,需要调整大小的时候再执行这段代码,以减少刷新次数。
    m_ListSearchContent.ModifyStyleEx(0,WS_EX_CLIENTEDGE |LVS_EX_DOUBLEBUFFER ); 
    m_ListSearchContent.SetExtendedStyle(LVS_EX_FULLROWSELECT); 
    改成这样写:
    m_ListSearchContent.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER);
    m_ListSearchContent.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
      

  9.   

    谢谢,cnzdgs,是我观察不仔细.
    CTreeCtrl控件加什么风格呀.我马上给分 
      

  10.   

    有这么个问题.WS_CLIPCHILDREN风格添加,OnPaint什么都不做,CTreeCtrl控件和CListctrl也闪烁.
    WS_CLIPCHILDREN风格不加,就不闪烁了.???