关于CListCtrl与CListView的问题,请高手指点

来源:互联网  时间:2016/7/17 1:17:32

关于网友提出的“ 关于CListCtrl与CListView的问题,请高手指点”问题疑问,本网通过在网上对“ 关于CListCtrl与CListView的问题,请高手指点”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于CListCtrl与CListView的问题,请高手指点
描述:

我的程序是单文档,多视图,每个视图都需要ListCtrl显示,同时工具栏里面有按钮可以切换ListCtrl的现实方式,如切换成大图标显示,小图标显示,列表和详细信息。为了使同一个按钮可以切换所有的视图,我定义了一个父类,CMyListView,派生自CView,然后在里面定义了一个公共变量,CListCtrl m_ListCtrl,在父类中增加了切换按钮的响应函数,添加代码:
m_ListCtrl.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);//列表显示
m_ListCtrl.ModifyStyle(LVS_TYPEMASK, LVS_ICON);//图表显示
等等。
然后定义了几个子类,均派生子CMyListView,在每个子类的OnCreate函数中,创建ListCtrl,
CRect rect;
GetClientRect(&rect);
m_ListCtrl.Create (WS_CHILD | WS_VISIBLE | LVS_REPORT, rect, this, 1);
然后再OnInitialUpdate函数中初始化ListCtrl,
CRect rect;
GetClientRect(&rect);
//m_ListCtrl.Create (WS_CHILD | WS_VISIBLE | LVS_REPORT , rect, this, 1);
m_ListCtrl.SetExtendedStyle(  LVS_EX_HEADERDRAGDROP | LVS_EX_FULLROWSELECT );
int nColInterval = rect.Width()/5;
m_ListCtrl.InsertColumn(0, _T("名称及规格"), LVCFMT_LEFT, nColInterval*2);
m_ListCtrl.InsertColumn(1, _T("单位"), LVCFMT_LEFT, nColInterval);
m_ListCtrl.InsertColumn(2, _T("库存"), LVCFMT_LEFT, nColInterval);
m_ListCtrl.InsertColumn(3, _T("存储位置"), LVCFMT_LEFT, rect.Width()-4*nColInterval);
这样,工具栏里面的切换按钮就可以控制所有的子类的显示类型切换。
目前的问题是:
1。再OnCreate函数中使用GetClientRect函数,得不到rect(其值为零),我只能在OOnInitiaUpdate函数中使用GetClientRect寒暑,才能得到rect,从而创建LListCtrl成功。
2。由于是多视图,我只有一个试图使用了切分窗口,现在只有在被切分的视图中加入的View,才能再OnIniteUpdate函数中使用GetClientRect函数得到rect,而与切分视图同级的View不论在OnCreate还是在OnInitiaUpdate函数中使用GetClientRect函数都得不到rect得值。
例如,我的程序中有两个View,CSplitterView和CTestView,均派生自CMyListView,在CSplitterView中切分视图,加入了两个新View,CMyView1和CMyView2,也派生自CMyListView,这几个View都是用父类的m_ListCtrl来创建ListCtrl。
这样,在CMyView1和CMyView2中,在OnInitiaUpdate函数中我可以得到rect得值,但是在OnCreate函数中得不到,然而在CTestView中,不论在OnCreate还是在OnInitiaUpdate中,都得不到rect的值,根本无法创建ListCtrl。
我也重载了OnSize函数,但是他对于初始化ListCtrl没有任何作用。
我曾经使用CListView类,既让CMyListView派生自CListView,从而可以使用
CListCtrl& m_wndList = GetListCtrl ();
CRect rect;
m_wndList.GetClientRect(&rect);
来得到ListCtrl,但是这样的话,我就没有办法在父类中定义一个变量,可供所有的子类使用,如果在父类中定义CListCtrl& m_wndList;的话,就回提示需要初始化变量,初始化成m_wndList = GetListCtrl ();也提示有问题。
请问我应该怎么做才可以呢?
谢谢了!
我的目的就是让工具栏里面的按钮可以控制所有的View的显示切换。


解决方案1:

应该在切换视图时保存和重新载入显示设置,类似资源管理器的扩展所必须实现的视图配置

解决方案2:

MainFrame里面,实现的函数也一样。
祝你新年快乐:)

解决方案3:

我都看晕了﹗

解决方案4:

ListView本身就是SysListView32窗口,不需要在里面再创建SysListView32窗口(CListCtrl)。
你的问题可以用模板解决,去看看ATL吧。

解决方案5:

晕了,太长也太乱了,具体点

上一篇输入法获取拼音的问题,帮忙进来看看
下一篇怎么能删掉word或excel的左上角的图标
明星图片
相关文章
《 关于CListCtrl与CListView的问题,请高手指点》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)