本人是刚从.net和java方向转到VC++开发的新手,现遇到一个问题想请教各位大师:
    本人定义了一个3重拆分框架(类似于FlashGet),要通过一个线程获得最里面一层SplitterWnd框架所包含的CFormView,然后再获得CFormView试图的List控件(使用GetDlgItem),最后在List控件上动态输出一些内容。但是,这个线程的过程函数不再MainFrm和其他试图文档类中,而是在一个普通的C++自定义类中(该类没有继承任何文档和视图),因此我要讲“什么(问题1)”参数传到过程函数中,在过程函数(独立的C++类中)中又如何获得所需要的List控件。
    
    本人试过很多方法,但是一到在普通自定义的C++类中用 (相关FormView句柄——如何获得?(问题2))->GetDlgItem(...)就出断言错,

解决方案 »

  1.   

    CSplitterWnd::GetPane 
    CWnd* GetPane( int row, int col );
    先通过这个获得你view的指针
    然后通过这个获得的指针去调用GetDlgItem获得formview上的控件指针,
      

  2.   

    CSplitterWnd::GetPaneReturns the pane at the specified row and column.CWnd* GetPane(
       int row,
       int col 
    ) const;
      

  3.   

    (CMyView*)MainFrame->m_wndSplitter.GetPane(1, 1);
      

  4.   

    1.首先把整个框架指针传入导线程函数,或者 不传,在里面用AfxGetMainWnd( )
    的得到MainFrame;
    2.用(CMyFormView*)MainFrame->m_wndSplitter.GetPane(1, 1);
    得到试图指针。
    3。就不用说了直接用这个指针调用GetDlgItem吧
      

  5.   

    谢谢大家的鼎力相助,上面的问题已经解决,但是在下还有一问题:以下是我的线程函数,在里面要动态更改拆分窗口中的CFormView的CListCtrl控件内容,但是无反应,没有变化。请问各位师傅,这是何故?
    UINT opDown( LPVOID pWnd )//--------->该函数在一个自定义的普通C++类中
    {
    CFormView * p_hWnd = ( CFormView * )pWnd; CListCtrl * cw = (CListCtrl *)p_hWnd->GetDlgItem(IDC_RIGHT2);
             LV_COLUMN lvc;
    lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    lvc.fmt = LVCFMT_LEFT;

    lvc.iSubItem = 0;
    lvc.pszText = (LPTSTR) _T( "名称  " );
    lvc.cx = cw->GetStringWidth(lvc.pszText)+80;
    cw->InsertColumn( 0, &lvc);
    lvc.iSubItem = 1;
    lvc.pszText = (LPTSTR) _T( "大小  " );
    lvc.cx = cw->GetStringWidth(lvc.pszText)+80;
    cw->InsertColumn( 1, &lvc);
    lvc.iSubItem = 2;
    lvc.pszText = (LPTSTR) _T( "已完成数 " );
    lvc.cx = cw->GetStringWidth(lvc.pszText)+80;
    cw->InsertColumn( 2, &lvc); CString strText;
    cw->InsertItem( LVIF_TEXT|LVIF_STATE, 0, strText, (0%2)==0 ?        LVIS_SELECTED : 0, LVIS_SELECTED, 0, 0);
    strText.Format(TEXT("%s, %s"), paraArray.fileName, paraArray.httpAddress);
    cw->SetItemText(0, 0, strText);
    return 0;
    }
      

  6.   

    没有反应…………你那个listctrl的属性设了吗,比如设成report型的
      

  7.   

    有可能是没有设置为report类型
      

  8.   

    设一下风格DWORD dwStyle = GetWindowLong(p_hWnd->m_hWnd, GWL_STYLE); 
    dwStyle &= ~(LVS_TYPEMASK);
    dwStyle &= ~(LVS_EDITLABELS);//设置新风格
        SetWindowLong(p_hWnd->m_hWnd, GWL_STYLE, dwStyle | LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);
      

  9.   

    这个CListCtrl是我在资源文件中拖上去的,
    唉,我设了风格还是不可以,法1:
    UINT opDown( LPVOID pWnd )
    {
    CFormView * p_hWnd = ( CFormView * )pWnd; CListCtrl * cw = (CListCtrl *)p_hWnd->GetDlgItem(IDC_RIGHT2);
    DWORD dwStyle = GetWindowLong(p_hWnd->m_hWnd, GWL_STYLE);
    dwStyle &= ~(LVS_TYPEMASK);
        dwStyle &= ~(LVS_EDITLABELS);
        SetWindowLong(p_hWnd->m_hWnd, GWL_STYLE, dwStyle | LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);
    法2:
    在PreCreateWindow()中设上述方法都不奏效
      

  10.   

    谢谢,你们了。问题总算解决了,如果我用create动态创建的CListCtrl,并且设置report就没有问题提了,可以动态的更新。 但为什么资源莫版的CListCtrl就不能够变,还不是很清楚。谢谢了!