注册 登录
编程论坛 VC++/MFC

请教 clistctrl 刷新的问题

wenmhappy 发布于 2013-07-30 10:25, 826 次点击
各位高手:

    我在开发时遇到clistcrl表头不能正常刷新的问题:


开发环境:vs2008  mfc sdi

代码如下(简化的)

class CMainFrame : public CFrameWndEx
{
   
protected: // 仅从序列化创建
    CMainFrame();
    DECLARE_DYNCREATE(CMainFrame)

// 属性
protected:
    CSplitterWnd m_wndSplitter;
   
        ...

};

OOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,    CCreateContext* pContext)
{
    if (!m_wndSplitter.CreateStatic(this, 2, 1))
        return FALSE;

    //
    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMyView), CSize(0, 400), pContext) ||
        !m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CMyView2), CSize(0, 0), pContext))
    {
        m_wndSplitter.DestroyWindow();
        return FALSE;
    }
}

// CMyView2 和CMyView 类似

class CMyView: public CView
{
    DECLARE_DYNCREATE(CMyView)

        CXListCtrl m_listCtrl;    // 派生自 CListCtrl,来自一个开源的控件(老外写的)

protected:
    CMyView();           // protected constructor used by dynamic creation
    virtual CMyView();

        ...
};

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;

    // TODO:  Add your specialized creation code here
    if (!m_listCtrl.Create(WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN
        | LVS_REPORT | LVS_SHAREIMAGELISTS | LVS_EDITLABELS,
        CRect(0,0,800,150), this, IDC_LISTCTRL))
    {
        TRACE0("Failed to create list control.\n");
        return -1;
    }
   
        m_listCtrl.SetFocus();
        
        // 插入表头
        ....

}

void CMyView::OnSize(UINT nType, int cx, int cy)
{
    CView::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
    m_listCtrl.MoveWindow(0, 0, cx, cy);   
}


问题:

当程序启动窗口是最大时,列表的头会显示一下后又被擦了,用鼠标滑过才会再显示,但如果启动时窗口不是最大化就不会有这种现象。
不知何故?在 CMyView::OnCreate()里加了一句 m_listCtrl.SetFocus(); 可以解决,但在win7上不可靠,有时正常有时还是会显示一次
表头,然后被擦掉。


请教高手。
2 回复
#2
yuccn2013-07-30 11:25
在OnSize调用一下m_listCtrl.Invalidate(FALSE); 试试看

[ 本帖最后由 yuccn 于 2013-7-30 11:27 编辑 ]
#3
未名湖的云2013-08-04 07:23
回复 楼主 wenmhappy
加个onpaint函数试试
1