| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 826 人关注过本帖
标题:请教 clistctrl 刷新的问题
只看楼主 加入收藏
wenmhappy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-7-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
请教 clistctrl 刷新的问题
各位高手:

    我在开发时遇到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上不可靠,有时正常有时还是会显示一次
表头,然后被擦掉。


请教高手。
搜索更多相关主题的帖子: public return 开发 
2013-07-30 10:25
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
在OnSize调用一下m_listCtrl.Invalidate(FALSE); 试试看

[ 本帖最后由 yuccn 于 2013-7-30 11:27 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-30 11:25
未名湖的云
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:130
专家分:190
注 册:2012-10-11
收藏
得分:10 
回复 楼主 wenmhappy
加个onpaint函数试试
2013-08-04 07:23
快速回复:请教 clistctrl 刷新的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016307 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved