碰到一个问题,不明白错在哪里,请大神们指点一下!!!
程序目的是在主窗口触发某事件后,弹出新的窗口显示列表,不同事件列表内容不同程序大概框架如下:
在主窗口类中添加了公有成员变量m_DeviceDlg,它也是窗口类型,并且它包含一个列表控件(ListCtrl)
//主窗口类定义
class CZigBeeHomeAutomationDesktopDlg : public CDialogEx
{
....
public:
CDeviceListDlg m_DeviceDlg;
void CZigBeeHomeAutomationDesktopDlg::OnClickDeviceList(NMHDR *pNMHDR, LRESULT *pResult);
....
}
//根据触发条件显示列表窗口
void CZigBeeHomeAutomationDesktopDlg::OnClickDeviceList(NMHDR *pNMHDR, LRESULT *pResult)
{
....
case ..:
m_DeviceDlg.LoadDeviceList(m_LockDeviceList, m_LockDeviceCount);
m_DeviceDlg.DoModal();
case ..:
....
}
//列表窗口类定义
class CDeviceListDlg : public CDialogEx
{
...
public:
CListCtrl m_TableList;
void LoadDeviceList(void);
...
}
//用于重载列表控件以显示不同内容
void CDeviceListDlg::LoadDeviceList()
{
....
DWORD dwStyle;
dwStyle = m_TableList.GetExtendedStyle();<----这里发生Debug assertion failed
}
m_TableList为什么不能用了呢?
已找到问题的原因了,是没有弄清楚窗口类对象与窗口本身的关系的问题,在Domodal之前窗口对象虽然存在但是窗口本身是不存在的,所以不能进行执行m_TableList.GetExtendedStyle()等对窗口动作,我是在 CDeviceListDlg添加变量来传递我需要的参数,然后通过这些参数用重载OnInitDialog来对m_TableList进行初始化。可参考:http://bbs.csdn.net/topics/390957303
是用的claawizard映射的m_TableList么?如果不是,建议你ctrl+w用classwizard去映射。直接定义没有把它和实际的控件关联起来。
是映射的,在控件上直接添加变量,难道是没有映射成功?怎么看是否映射成功
调试下,看m_TableList在那一行其中诸如hwnd之类的变量是否正常