本人要在图象检索反回结果后,想在图象的下方创建combobox,
:
在当前类中创建Lm_Feedback.Create(CBS_DROPDOWNLIST|WS_VISIBLE|WS_CHILD,m_Feedback[i],this,i);
                       
能创建,但是运行时马上异常,显示ASSertion Failed.改成在主窗口中创建:
m_Feedback[i].Create(CBS_DROPDOWNLIST|WS_VISIBLE,rectFeedBack[i],AfxGetApp()->m_pMainWnd,IDD_CMB_FEEDBACK);
也是一样的错误.
不过,就是不知道怎么获得其父类的窗口..通过this如何获得WND* pParentWnd

解决方案 »

  1.   

    获得父窗口句柄不是有GetParent吗?
      

  2.   

    调试跟踪进入ASSERT FAILED代码处。
    看看什么断言错误!
      

  3.   

    Create 确定是回true,在主窗口AfxGetApp()->m_pMainWnd中创建也是返回true,调试跟踪,停在77D1B517   call        77D194A4停止.我用mFc时间不长......也不知道为什么错..在AFXSTATE.CPP的AfxWndProcBase(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) 

    AFX_MANAGE_STATE(_afxBaseModuleState.GetData()); 
    return AfxWndProc(hWnd, nMsg, wParam, lParam); 
    }的return AfxWndProc(hWnd, nMsg, wParam, lParam)中停在77D1B517  call  77D194A4这里不动.
    程序代码如下:
    m_Feedback[10],rectFeedBack[10]都是全局变量
    ----------------------------------
    if (!pDoc->m_pDibResu[i].IsEmpty(
    {
    pDoc->m_pDibResu[i].Display(pDC,xDest1,yDest,128,96,0,0,pDoc->m_pDibResu[i].GetWidth(), pDoc->m_pDibResu[i].GetHeight());//显示图片
    rectFeedBack[i].left=xDest1;//rectFeedBack[10]是全局变量,这里定义其左右上下的坐标
    rectFeedBack[i].right=xDest1+pDoc->m_pDibResu[i].GetWidth();
    rectFeedBack[i].top=yDest+240+pDoc->m_pDibResu[i].GetHeight();
    rectFeedBack[i].bottom=rectFeedBack[i].top+30;
     m_Feedback[i].Create(CBS_DROPDOWNLIST|WS_VISIBLE,rectFeedBack[i],this->GetParent(),i);//创建组合框,以i作为ID号
        m_Feedback[i].AddString("相似");
        m_Feedback[i].AddString("极不相似");
        m_Feedback[i].SetCurSel(0);
        xDest1+=150;
    }
      

  4.   

    估计问题就出在创建ccomboBox的参数*pParentWnd上,在这里this是当前的视图类CResultView,而this->GetParent()是其所在的拆分窗口CSplitterWnd,但this->GetParent()返回的是CWnd类型,如果这样付值,
    CSplitterWnd *splitwnd=this->GetParent();会报错,那么我到底如何获取当前的父窗口呢.窗口是这样拆分的:
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
    {
        VERIFY(m_wndSplitter.CreateStatic(this,2,1));
        VERIFY(m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CRetrievallView), CSize(200, 200), pContext));
        VERIFY(m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CResultView),CSize(100, 100), pContext));
    return true;
    }
    当前视图this是CResultView.
    如果改从m_pMainWnd获取 拆分子窗口的句柄,如何用函数呢.
      

  5.   

    CMainFrame* pMainframe=(CMainFrame*)AfxGetApp()->m_pMainWnd;
    CResultView *pView=(CResultView*)pMainframe->m_wndSplitter.GetPane(1,0);
      

  6.   

    我有点疑问, 窗口创建建在哪个窗体之上, 就以这个窗口的句柄为父句柄好了, 不明白你搞的这么复杂,还跟视图类扯上关系, 视图类又不是窗口,如果你用分割条把主窗口分为两部分(假如是左右,那你左右两部分肯定要加一个窗口的,cleftwnd, crightwnd,窗口属性就是一般的ws_child|ws_visble等,commbox就得在这上面创建,父窗口就是这两个, 不能直接创建).
      

  7.   

    回答各位热心人...
    上面的方法都试过了.一样的错误...
    我是新手...
    在返回结果的视图类里显示图片,在图片下方同时也显示组合框,
    现在就是不知道当前子窗口怎么获取.
    我要找的就是当前的子窗口...this返回的就是当前的视图类....
      

  8.   

    你的 CResultView 的父类是? 如果是CView 或 CFormView 之类的话应该可以,如下创建就行
    XXX.Create(CBS_DROPDOWNLIST|WS_CHILD|WS_VISIBLE,CRect(20,20,100,60),this,120374);
      

  9.   

    Create完成后不能马上对combobox,因为create返回后窗口并没有完全创建起来,要等到WM_CREATE 消息后才能对combobox坐addstring之类的操作
      

  10.   

    楼上的方法我都试过了...组合框的创建都是成功的.
    也试过基类改成CFormView,和CScrollView,但是都是同样的错误.ASSertion Failed. 提示框里说错误出现在wincore.cpp.调试跟踪
    在AFXSTATE.CPP的AfxWndProcBase(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) 

    AFX_MANAGE_STATE(_afxBaseModuleState.GetData()); 
    return AfxWndProc(hWnd, nMsg, wParam, lParam); 
    }的return AfxWndProc(hWnd, nMsg, wParam, lParam)中停在77D1B517  call  77D194A4这里不动.