VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 706|回复: 4

关于CListView和窗体拆分的问题,请指教,谢谢.

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-19 17:30:01 | 显示全部楼层 |阅读模式
我创建了个MFC工程,界面是左树右图的方式,并在右边下方显示操作结果.
现在把窗口分割成四个子窗口,我想在右边下方显示每一步操作的结果,这是一个CListView,我在OnCreate方法中初始化这个控件没问题,但是在我自定义的输出函数中一直输出不成功,跟进去发现是一个断言出错,原因是所取得的hWnd为空,百思不得其解,请各位达人指教.
代码如下:
int COpResultView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
        if (CListView::OnCreate(lpCreateStruct) == -1)
                return -1;
//从ListView中取得ListCtrl控件
        CListCtrl& m_ListControl = GetListCtrl();
        //设置ListCtrl风格
        m_ListControl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES
          |LVS_EX_HEADERDRAGDROP|LVS_EX_REGIONAL);       
        //插入列名
        m_ListControl.InsertColumn(0,"主机",LVCFMT_CENTER,150);
        m_ListControl.InsertColumn(1,"IP",LVCFMT_CENTER,100);
        m_ListControl.InsertColumn(2,"端口",LVCFMT_CENTER,50);
        m_ListControl.InsertColumn(3,"操作",LVCFMT_CENTER,200);
        m_ListControl.InsertColumn(4,"时间",LVCFMT_CENTER,170);

          m_ListControl.InsertItem(0,"BMW 317i");
  m_ListControl.SetItemText(0,1,"Sport");
  m_ListControl.SetItemText(0,2,"Germany");
  m_ListControl.InsertItem(0,"Ford Fiesta");
  m_ListControl.SetItemText(0,1,"Family");
  m_ListControl.SetItemText(0,2,"USA");
        return 0;
}
这个方法没有问题,但我自定义的输出函数就有问题了.
void COpResultView::ShowOpResult(CString hostname, CString IP, int port,
                CString Result, CString time)
{
        CListCtrl& m_ListControl = GetListCtrl();
        CString tempport;
        tempport.Format("%d",port);

        m_ListControl.InsertItem(0,_T(hostname));
        m_ListControl.SetItemText(0,1,_T(IP));
        m_ListControl.SetItemText(0,2,_T(tempport));
        m_ListControl.SetItemText(0,3,_T(Result));
        m_ListControl.SetItemText(0,4,_T(time));
}
这个方法m_ListControl中的hWnd一直为空,不能对它进行操作.
我在MainFrm中是COpResultView OpResult;然后调用ShowOpResult()的.
不知CListCtrl& m_ListControl = GetListCtrl();是否有错,不知是否与窗体拆分有关系,请各位高手指教,谢谢.
回复

使用道具 举报

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-5 23:00:01 | 显示全部楼层
COpResultView OpResult;

????
那你怎么把它显示出来的???假如不ShowOpResult的话……
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-7-6 18:00:01 | 显示全部楼层
就是通过实例化一个对象,然后调用它的方法OpResult.ShowOpResult()来插入显示结果啊.有什么问题吗?
回复

使用道具 举报

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-7-8 14:45:01 | 显示全部楼层
偶是说,你的那个视图,是咋显示出来的?


“就是通过实例化一个对象,然后调用它的方法OpResult.ShowOpResult()来插入显示结果啊”

哪有这么显示视图的啊?不调用OpResult.ShowOpResult(),你看到视图显示了吗?!
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-7-19 19:00:01 | 显示全部楼层
哎,我是在拆分窗体的时候就显示了.
    m_rightSplitter.CreateView(1,0,RUNTIME_CLASS(COpResultView),
                CSize((rc.Width()-200),rc.Height()*3/10), pContext);
创建视图的时候已经插入了几行,是正常的,只是在后面再调用OpResult.ShowOpResult()的时候就失败了,hWnd为空,问题就在这里,望大侠指正.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表