ListView这东西是怎么折腾得?谁能讲将 ?????

mengsu 2005-05-04 10:58:22
ListView的视图建好了,怎么才能对列表视图文档进行读写操作?
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
糊糊 2005-05-05
  • 打赏
  • 举报
回复
从CListView派生一个CXXXListView来,然后就是把对文档的支持加进来.
class CXXXListView : public CListView
{
public:
CXXXListView(); // protected constructor used by dynamic creation
virtual ~CXXXListView();

protected:
DECLARE_DYNCREATE(CXXXListView)
// Generated message map functions
protected:
//{{AFX_MSG(CXXXListView)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// Attributes
public:

// Operations
public: //<<<添加文档支持
CPicDrawDoc* GetDocument(); //<<<添加文档支持

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CXXXListView)
public:
virtual void OnInitialUpdate();
protected:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
//}}AFX_VIRTUAL

// Implementation


public:
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
};

#ifndef _DEBUG //<<<调试版本中的文档支持
inline CYourDoc* CXXXListView::GetDocument()
{
return (CYourDoc*)m_pDocument;
}
#endif//_DEBUG

==================
添加了文档支持之后,主要是响应CXXXListView::OnInitialUpdate() 和CXXXListView::OnUpdate(),
前者主要是CXXXListView的初始化,后者主要是文档发生变化的时候,更新CXXXListView视图的.

这里给你一个我的代码的片段吧.以前用于绘图的时候,每绘制一个图形就把它添加到CXXXListView的列表中去.

void CXXXListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
DWORD dwStyle=GetListCtrl().GetStyle()|LVS_LIST;
::SetWindowLong(GetListCtrl().GetSafeHwnd(),GWL_STYLE,dwStyle);

}

void CXXXListView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
CPicDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

if(pHint!=NULL)
{//用户添加了一个新的图形
if(pHint->IsKindOf(RUNTIME_CLASS(CGraphic)))
{
CGraphic* pGraphic=(CGraphic*)pHint;
CRect rc=pGraphic->GetPosition();
COLORREF cr=pGraphic->GetColor();
CString sItem;
sItem.Format("%s 起点(%d,%d) %3dx%3d 颜色RGB(%3d,%3d,%3d)",
pGraphic->GetTypeAsString(),
rc.TopLeft(),//rc.BottomRight(),
rc.Width(),rc.Height(),
GetRValue(cr),GetGValue(cr),GetBValue(cr));
GetListCtrl().InsertItem(GetListCtrl().GetItemCount(),sItem);

}
else if (pHint->IsKindOf(RUNTIME_CLASS(CObList)))
{
//删除控件列表
GetListCtrl().DeleteAllItems();

POSITION pos=pDoc->m_graphicList.GetHeadPosition();
while(pos!=NULL)
{
CGraphic* pGraphic=pDoc->m_graphicList.GetNext(pos);


CRect rc=pGraphic->GetPosition();
CString sItem;
sItem.Format("%s 起点(%d,%d) %dx%d",pGraphic->GetTypeAsString(),rc.TopLeft(),rc.Width(),rc.Height());
GetListCtrl().InsertItem(GetListCtrl().GetItemCount(),sItem);
}
}
}
else if (pDoc->m_graphicList.IsEmpty())
{
GetListCtrl().DeleteAllItems();
}
}


希望能够解决你的问题,如果还有疑问,发邮件到huyoo353@126.com
oyljerry 2005-05-05
  • 打赏
  • 举报
回复
GetListCtrl()获得ListCtrl控件的引用
cvip11 2005-05-05
  • 打赏
  • 举报
回复
GetListCtrl().
surstar 2005-05-04
  • 打赏
  • 举报
回复
如果是指的CListCtrl 的话

1 创建时要包括LVS_EDITLABELS 样式
2 还要响应列表试图是通知:LVN_BEGINLABELEDIT 和LVN_ENDLABELEDIT ,为此,要先重载 VIEW类的OnNotify().OnNotify() 函数响应WINDOWS 包装了的LVN_BEGINLABELEDIT 和LVN_ENDLABELEDIT 通知的WM_NOTIFY消息
surstar 2005-05-04
  • 打赏
  • 举报
回复
ListView是说的CListCtrl 吗?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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