请教 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上不可靠,有时正常有时还是会显示一次
表头,然后被擦掉。
请教高手。