【问题标题】:Can we Create ListCtrl in view in MDI application or we always need to draw it?我们可以在 MDI 应用程序的视图中创建 ListCtrl 还是我们总是需要绘制它?
【发布时间】:2014-12-25 06:03:10
【问题描述】:

我目前正在尝试在我的 MDI 应用程序的视图部分中创建一个 listctrl,因为我正在链接一个 listctrl 指针,所以我需要在视图上绘制一次,但是我无法做到,因为我是初学者,谁能给我答案

    int CDB_DOC_VIEW_MYView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;
    CDB_DOC_VIEW_MYDoc *pDoc = GetDocument();
    CRect WndRect, ListRect;
    this->GetWindowRect(&WndRect);
    //CListCtrl *pListCtrl = new CListCtrl();
    CListCtrl &pListCtrl = GetListCtrl();
    /*ListRect.top    = WndRect.top - 5;
    ListRect.left   = WndRect.left - 5;
    ListRect.bottom = WndRect.bottom - 5;
    ListRect.right  = WndRect.right - 5;*/
    pListCtrl.Create( WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_REPORT , ListRect, this, ID_LIST_CTRL); 
    for( int col = 0; col < 5; col++ )
    {
        pListCtrl.InsertColumn(col, _T("1")); 
    } 
    pListCtrl.ShowWindow(SW_SHOW);
    return 0;
}

这就是我做的?

【问题讨论】:

  • 也许是我,但我认为你的问题没有任何意义。
  • @JonathanPotter 不仅仅是你。我认为 OP 正在尝试使用 ListView as MDI 子窗口;不像大多数人会编码的那样,作为完全包含 MDI 子客户区的子控件。可能是错的。这确实很难说。
  • i,只是,对代码稍作修改,nw,它可以工作,,,,但是,只有在将此代码放入onsize()函数后才会显示listctrl,,void CDB_DOC_VIEW_MYView::OnSize(UINT nType , int cx, int cy) { CListView::OnSize(nType, cx, cy); // TODO: 在此处添加您的消息处理程序代码 if(::IsWindow(m_listCtrl.m_hWnd)) m_listCtrl.MoveWindow(0,0,cx,cy,TRUE); }但我不知道,为什么当我得到 getwindowrect() 视图时需要这个声明,并且我将它放置在 create function() 中
  • GetWindowRect 返回屏幕坐标。这需要转换为客户端坐标才能在窗口内创建一些东西。您可以使用 ScreenToClient 来做到这一点。
  • ScreenToClient(&WndRect);不工作,还需要写MoveWindow(),我只是想知道没有MoveWindow()它去了哪里,如果创建了,那么,,,,为什么不显示?

标签: c++ c visual-c++ mfc mdi


【解决方案1】:

尝试从CListView 派生您的 CView。

【讨论】:

  • 我已经完成了这个任务,感谢大家的建议
猜你喜欢
  • 2022-01-05
  • 2020-03-23
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多