Re: Why this strange behaviour regarding subclassing controls
bhargavi_ks2001@yahoo.com wrote:
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::operator 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::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(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::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(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);
}
Bhargs:
And what are the variables in
m_myListSeriesCtrl.SetTabToFill(tab1); First List control of tab
control
m_ResultsCtrl.SetTabToFill(tab1); //Second List control of tab control
??
m_myListSeriesCtrl is the list control on the form view, yes?
What is m_ResultsCtrl?
And aren't these commands supposed to operate on the controls in the
tab? This is not a good design. Whatever these commands are supposed to
accomplish (you do not say), it would be better to call a method of
CTab1 to do it.
You have a very confusing design and nomenclature, and I sense that you
are using the class CMyListSeriesCtrl for two different objects, which
could be a problem as (I think) you are using message reflection.
David Wilkinson