首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

一个关于ListCtrl的有关问题

2012-02-13 
一个关于ListCtrl的问题遇到一些问题。希望各位不吝赐教。先谢过了。现在有两个界面,称为A和B吧。通过网口传输

一个关于ListCtrl的问题
遇到一些问题。希望各位不吝赐教。先谢过了。
现在有两个界面,称为A和B吧。
通过网口传输数据。在A界面接收数据,然后在B界面通过一个ListCtrl显示
ListCtrl控件选择为report
每接收一个数据就在list中显示一个。
现在的问题是。如果在A界面来做这个事情(既在A也添加一个ListCtrl   ),在网口收到数据显示是正常的。可是如果想在B界面显示就所有错误了。
B界面的对话框类为CBDlg,里面有一个function叫做Indicate好了。
void   CBDlg::Indicate()
{      
        m_List1.InsertItem(0,NULL);
        AfxMessageBox(_T( "a "));
}
在A界面的接收到数据后调用
CBDlg   dlg;
dlg.Indicate();
别的功能先不做,就想先添加一行。没有内容。
编译什么的都没错。可是一运行程序。在收到数据后运行到InsertItem时就会断言错误。

_AFXCMN_INLINE   int   CListCtrl::InsertItem(int   nItem,   LPCTSTR   lpszItem)
{   ASSERT(::IsWindow(m_hWnd));   return   InsertItem(LVIF_TEXT,   nItem,   lpszItem,   0,   0,   0,   0);   }

不知道什么原因。是认为我没初始化m_List1么?可是我有在B界面DoDataExchange里加以下代码。
void   CBDlg::DoDataExchange(CDataExchange*   pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBDlg)
DDX_Control(pDX,   IDC_LIST1,   m_List1);
//}}AFX_DATA_MAP
}
并且网口发数据是在B界面来控制的,既需要先启动B界面,按一次BUTTON对方发过来一个数据。那也应该初始化了m_List1了呀。
想不明白了。求人执教。
谢谢了。


[解决办法]
在dlg.Indicate();之前加上dlg.DoModal();试试。

CBDlg dlg;只是定义一个CBDlg类变量而已,没有初始化。
[解决办法]
在A界面的接收到数据后调用
CBDlg dlg;
dlg.Indicate();
-------------------------
你这样做,是每次收到一个消息就创建了一个CBDlg的实例啊!

在主窗口中保存一个CBDlg *pDlg;
收到消息后:pDlg-> Indicate();
[解决办法]
CBDlg dlg;
dlg.Indicate();//对话框都没有创建, 所以里面的控件也没有创建起来, 这样做肯定没有反应的

先Create dlg

热点排行