Why this strange behaviour regarding subclassing controls - Programmer

This is a discussion on Why this strange behaviour regarding subclassing controls - Programmer ; hi I am unable to solve this after spending lot of time ,Can someon ehelp me out here I get assertion here and the window becomes NULLL after assigning in the OnIntialUpdate of formView.--afxwin2.inl // CWnd _AFXWIN_INLINE CWnd: perator HWND() ...

+ Reply to Thread
Results 1 to 3 of 3

Thread: Why this strange behaviour regarding subclassing controls

  1. Why this strange behaviour regarding subclassing controls

    hi
    I am unable to solve this after spending lot of time ,Can someon ehelp
    me out here
    I get assertion here and the window becomes NULLL after assigning in
    the OnIntialUpdate of formView.--afxwin2.inl
    // CWnd
    _AFXWIN_INLINE CWnd:perator HWND() const
    { return this == NULL ? NULL : m_hWnd; }


    The problem is subclassing controls and the communication between each
    subclassed control
    In a view
    there ia
    One List Control -
    One TabControl and inside the tabcontrol there are 2 list controls
    These 2 list controls are in a Dialog1 - CTab1

    The communication happens fine between the list control and the list
    control which is inside the tab control.

    The communication fails between the 2 list controls inside the tab
    control.
    Am i missing any basics here?
    Pls guide
    Here is the code for data exchnage and when I click the first list
    control it comes in DDX exchange but not the when I clcik inside the
    tab control.
    I get assertion error

    ***********CCView.cpp
    void CCView:oDataExchange(CDataExchange* pDX)
    {
    CFormView:oDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST_RESULTS2, m_myListSeriesCtrl);
    DDX_Control(pDX, IDC_AUTO_DELETE, m_CtrlAutoDelete);
    DDX_Control(pDX, IDC_TAB_CTRL, m_myCtrlTab);

    }


    ----CTab1.cpp
    void CTab1:oDataExchange(CDataExchange* pDX)
    {
    CDialog:oDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST_SERIES1, m_myListSeriesCtrlinTab);
    DDX_Control(pDX, IDC_IMAGE_LSTCTRL, m_IconsListCtrl);

    }

    I call these function from teh OnInitialUpdate of CCView derieved from
    CFormView

    m_myListSeriesCtrl.SetTabToFill(tab1); //First List control of tab
    control
    m_ResultsCtrl.SetTabToFill(tab1); //Second List control of tab control


    In the onClick of FirstList Control
    void CMyListSeriesCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
    {
    // TODO: Add your control notification handler code here
    //m_pmyListSeriesCtrl->DeleteAllItems();
    my_tab1->m_myListSeriesCtrlinTab.DeleteAllItems();
    CString strMessage;
    *pResult = 0;
    int nRow = GetNextItem(-1, LVNI_SELECTED);
    strMessage.Format(_T("Row selected is % d "),nRow +1);
    //AfxMessageBox(strMessage);
    CString ItemData1= GetItemText(nRow,0);
    //AfxMessageBox(ItemData1);
    CString ItemData2= GetItemText(nRow,1);
    //AfxMessageBox(ItemData2);
    CString ItemData3= GetItemText(nRow,2);

    //AfxMessageBox(ItemData1 + ItemData2 + ItemData3);

    my_tab1->m_myListSeriesCtrlinTab.InsertItem(0,ItemData1);
    my_tab1->m_myListSeriesCtrlinTab.SetItemText(0, 1, ItemData2);
    my_tab1->m_myListSeriesCtrlinTab.SetItemText(0, 2, ItemData3);

    //my_tab1->m_IconsListCtrl.SetIconToFill(&my_tab1->m_IconsListCtrl);

    my_tab1->m_IconsListCtrl.InsertItem(0,ItemData1);
    my_tab1->m_IconsListCtrl.SetItemText(0, 1, ItemData2);
    my_tab1->m_IconsListCtrl.SetItemText(0, 2, ItemData3);
    }

    Inthe OnClick of second List Control
    void CMyListSeriesResltsCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT
    *pResult)
    {
    // TODO: Add your control notification handler code here

    *pResult = 0;
    CString strMessage;
    strMessage = "List Series Results Control0-OnNMClick";

    // CString strMessage;
    *pResult = 0;
    int nRow = GetNextItem(-1, LVNI_SELECTED);
    strMessage.Format(_T("Row selected is % d "),nRow +1);
    //AfxMessageBox(strMessage);
    CString ItemData1= GetItemText(nRow,0);
    //AfxMessageBox(ItemData1);
    CString ItemData2= GetItemText(nRow,1);
    //AfxMessageBox(ItemData2);
    CString ItemData3= GetItemText(nRow,2);

    ASSERT(my_tab1->m_IconsListCtrl);

    my_tab1->m_IconsListCtrl.InsertItem(0,ItemData1);
    my_tab1->m_IconsListCtrl.SetItemText(0, 1, ItemData2);
    my_tab1->m_IconsListCtrl.SetItemText(0, 2, ItemData3);


    }


  2. Re: Why this strange behaviour regarding subclassing controls

    One more thing I observed when I keep a break point at DoDataExchange
    ,after calling the function
    m_myListSeriesCtrl.SetTabToFill(tab1); //First List control of tab
    control
    m_ResultsCtrl.SetTabToFill(tab1); //Second List control of tab control


    this shoudl be called twice ! Right this is getting called only 1 time

    void CTab1:oDataExchange(CDataExchange* pDX)
    {
    CDialog:oDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST_SERIES1, m_myListSeriesCtrlinTab);
    DDX_Control(pDX, IDC_IMAGE_LSTCTRL, m_IconsListCtrl);


    }


  3. Re: Why this strange behaviour regarding subclassing controls

    The first list control can talk to 2 list controls inside the tab
    control but the
    2 list controls inside the tab control cannot talk to each other.

    Any ideas to share ??


+ Reply to Thread