父窗口按钮启动一个模态对话框
我需要利用这个对话框的按钮来控制父窗口向其List控件加Item我试过用GetDlgItem函数来获得父窗口指针
但返回空

解决方案 »

  1.   

    CWnd* pWnd = GetParent();可以得到父窗口的指针
      

  2.   

    GetParent()这个我也试过
    CImageListCtrl *pImageList = (CImageListCtrl*)(pParent->GetDlgItem(IDC_LIST_SCAN_IMG));
    父窗口的指针得到了
    但CImageListCtrl的指针还是空哪位高人知道怎么回事
      

  3.   

    模态对话框的两个构造重载 explicit CDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
    explicit CDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);指定pParentWnd,然后就可以用CWnd* pWnd = GetParent();获得父窗口指针。
      

  4.   

    父窗口指针可以获得
    但List控制的自制类无法获得
      

  5.   

    CParentDlg* pDlg = (CParentDlg*)GetParent();这样就可以得到自制类
      

  6.   

    你还没理解我的意思
    我用CWnd *pParent = GetParent();获得了父窗口的指针了
    我用这个父窗口指针的GetDlgItem()函数取获得我继承CListCtrl派生的CImageListCtrl时得到的是空
    CImageListCtrl *pImageList = (CImageListCtrl*)pParent->GetDlgItem(IDC_LIST_SCAN_IMG);为什么啊
      

  7.   

    用EnumChildWindows()看能不能够获取到CImageListCtrl的句柄(再根据需要转成指针)
      

  8.   

    单步跟踪一下GetDlgItem内的执行情况,没有提供代码信息是问不出什么结果的。
      

  9.   

    我也遇到过这个问题,后来给控件关联了一个对象,然后用pParent->控件对象  解决了问题
      

  10.   

    还是得不到并且我试着用GetDlgItem函数取获得所在窗口的控件指针也得不到
      

  11.   

    我试过用全局的指针了
    CXBHealthExamApp *pApp = (CXBHealthExamApp*)::AfxGetApp();
    CScanInfoDlg *pMain = (CScanInfoDlg*)pApp->m_pMainWnd;
    然后再调用我在这个类中定义的控件的变量
    结果运行直接报错了
      

  12.   

    我是说 amdlinux() 说的那种我初学VC对它的消息机制不态熟
    可以贴些实例代码或发个源码吗
      

  13.   

    那位告诉我下对父窗口的LIST控件怎么发送消息
    并且可以通过参数把一个变量传过去
    让list添加item
      

  14.   

    GetOwner()->GetDlgItem(...)
    用这个也返回空
      

  15.   

    你在创建子窗口的时候有没有指定父窗口这个关系?如:
    m_child.Create(.....this)
      

  16.   

    按理说是可以使用
    GetParent()->GetDlgItem(ID_YOUR);来得到的实在不行的话,这样,声明一个Load函数
    Load(CWnd* pParent,CWnd *YouCtl)
    {
        pSaveList=YouCtrl;
        Create(pParent,...);
    }最好把关键源代码发给我,用短消息。
      

  17.   

    我原来是用DoModal的方式
    后来用了m_scanAcquireDlg.Create(IDD_DIALOG_SCANACQUIRE,this)
    这种方式
    pParent->GetDlgItem(IDC_LIST_SCAN_IMG)
    还是空
      

  18.   

    我把整个过程重新叙述一下吧在父窗口类中的操作:
    List控件声明的一个编写的CListCtrl的派生类CImageListCtrl的对象
    里面有几个添加缩略图的函数m_scanAcquireDlg是子窗口的对象
    m_scanAcquireDlg.DoModal();弹出窗口在子窗口类中的操作:
    CWnd *pParent = GetParent();
    CImageListCtrl *pImageList = (CImageListCtrl*)(pParent->GetDlgItem(IDC_LIST_SCAN_IMG));
    然后像通过pImageList调用父窗口List控件的函数在里面添加缩略图哪位高人能帮帮我分析下为什么不行
    万分感谢
      

  19.   

    模态对话框不能动态的改变它父窗口的的控件,可以用非模态。可以通过pubilc的全局变量或发送消息的方式让父窗口去改变。
      

  20.   

    非模态对话框
    GetDlgItem(IDC_LIST_SCAN_IMG)得到的也是空
    全局变量的方式也不行消息怎么把子窗口的变量传过去我不太会可以赐教下吗
      

  21.   

    我就用的模态的阿,怎么我这里可以,我的过程是这样的,看看你有没有用.
    CRightBtView 是从FormView继承来.上面放了一个listctrl--m_listctrl
    void CRightBtView::OnDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
    // TODO: Add your control notification handler code here
    int i = m_listctrl.GetNextItem(-1, LVNI_SELECTED);
    if (i < 0) return;
    CString temp;
    temp = m_listctrl.GetItemText(i,1);
    //////////////////////////////////////////////////////////////////////////
      CMainFrame *frame = (CMainFrame*)m_ParentFrame;
    CListCtrlView *ctrlview = (CListCtrlView*)frame->m_wndSplitter2.GetPane(1,0);
    strcpy(ticket_NO,ctrlview->current_NO);
    CDlgCzpEditSec dlg;
    dlg.tracsFrame = m_ParentFrame;
    dlg.DoModal();
    然后在dlg类的保存或者其他操作的时候,利用m_parentframe来得到Crightbtview,然后得到m_listctrl的变量的指针,直接使用.程序现在正常使用.
      

  22.   

    先判断父窗口是不是空CWnd* pParent = GetParent();
    if( pParent )
    {
    }