请教clistctrl刷新的问题

wm_hust 2013-07-30 10:43:15
各位高手:

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


开发环境: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上不可靠,有时正常有时还是会显示一次
表头,然后被擦掉。
请教高手。
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-08-31
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
向立天 2013-07-31
  • 打赏
  • 举报
回复
你还是用ListView吧 然后子类化掉它内部的listctrl试一下
schlafenhamster 2013-07-31
  • 打赏
  • 举报
回复
m_listCtrl.MoveWindow(0, 0, cx, cy) 这句没错,
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
sdi 用 listview 才正常, 干嘛用 listctrl ?
wm_hust 2013-07-30
  • 打赏
  • 举报
回复
我用标准控件clistctrl也是一样的,用clistview 就没问题
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
“ 派生自 CListCtrl,来自一个开源的控件(老外写的)” 可能有问题 ?
昨夜无风 2013-07-30
  • 打赏
  • 举报
回复
在OnSize里m_listCtrl.UpdateWindow()刷新下吧
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
1. 把 你的listctrl 搞成 listView 这比较难 2. 可能Frame对你的窗口大小的计算发生了问题。
wm_hust 2013-07-30
  • 打赏
  • 举报
回复
扩充list 的功能

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧