我在一个单文档程序中动态添加了一个CListCtrl控件ID为m_ListCtrl,是通过右键菜单添加的,添加之后m_ListCtrl不是处在激活状态,我使用了m_ListCtrl.BringWindowToTop()使它获得了焦点,但m_ListCtrl却无法显示,如果不用m_ListCtrl.BringWindowToTop(),m_ListCtrl可以显示,但不是处在激活状态。如果能够使m_ListCtrl创建后就处在激活状态而且能显示出来呢?

解决方案 »

  1.   

    应该可以的,看看你的代码有何特殊之处。当然,不需要BringWindowToTop。
      

  2.   

    CRect rect;

        
    if(mm_ListCtrl)
    {
    mm_ListCtrl.DestroyWindow();
    }
    CWnd *CFrmWnd=AfxGetMainWnd();
    CFrmWnd->SetFocus();
    CFrmWnd->GetClientRect(rect);
    rect.top+=3;
    CStatic mm_Static;

    mm_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,rect,CFrmWnd,1);    CFrmWnd->GetClientRect(rect); //mm_ListCtrl.SetBkColor(RGB(177,151,240));
    mm_ListCtrl.SetTextColor(RGB(0,0,0));
    //mm_ListCtrl.SetTextBkColor(RGB(177,151,240));
    mm_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
    mm_ListCtrl.InsertColumn(0,_T("右键标准编号"),LVCFMT_LEFT,100);
    mm_ListCtrl.InsertColumn(1,_T("右键标准名称"),LVCFMT_LEFT,100);
        mm_ListCtrl.BringWindowToTop();

    CString str;
    for(int i=0;i<4;i++)
    {
    str.Format("编号%d",i+1);
    mm_ListCtrl.InsertItem(i,str);
    str.Format("房间%d",i+1);
    mm_ListCtrl.SetItemText(i,1,str);
    }以上是我的代码,运行后mm_ListCtrl无法显示
      

  3.   

    这应该是个界面绘制的问题。在OnPaint中调控件的重绘试试?
      

  4.   

    mm_ListCtrl.BringWindowToTop();
    改为:
    mm_ListCtrl.ShowWindow(SW_SHOW);
      

  5.   

    mm_ListCtrl.ShowWindow (SW_SHOW);
      

  6.   

    说一下,我的listctrl是通过右键菜单建立并绘制在视图里的,我想在绘制listctrl后使之显示出来并能处在激活状态。
    我现在的程序通过右键菜单可以显示listctrl,但是它没被激活,因为它的表头无法通过鼠标拉动来改变其长度。
      

  7.   

    代码乱七八糟,变量乱七八糟,逻辑乱七八糟,还满嘴脏话。楼主需要好好学学基础和为人。单文档客户区被视图占据,你要么替换视图,或者调整视图大小,给你的控件留出空间。其实最一般的是在视图中创建;更简单的是从CListView继承视图类。另外,不要因为你自己说不清楚搞不明白来怪别人。