读书人

有个有关问题实在解决不了请大家帮帮忙

发布时间: 2013-08-06 16:47:25 作者: rapoo

有个问题实在解决不了请大家帮帮忙?
本帖最后由 VisualEleven 于 2013-07-26 18:58:42 编辑 我有一个对话框CTeachDlg,这对话框上有两个列表控件m_Teach_ListCtrl,m_List_Cmd_Info,其中m_Teach_ListCtrl是通过派生类去自己绘制的。我想实现选中m_Teach_ListCtrl中某一行时,在m_List_Cmd_Info中显示此行的相关信息。
在派生类的DrawItem里

void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//省略....
if (state&ODS_SELECTED)
{CTeachDlg teach;
teach.ShowCmdInfo(nindex);
}
}
在void CTeachDlg::ShowCmdInfo(int nIndex)
{
CString str;
str=m_Teach_ListCtrl.GetItemText(nIndex,1);
CString sIndex[10];
sIndex[0]=_T("Command");
sIndex[1]=_T("Para1");
sIndex[2]=_T("Para2");
if (1/*_T("Axis")*/)
{
for (int i=0;i<5;i++)
{
m_List_Cmd_Info.InsertItem(i,sIndex[i]);
}
m_List_Cmd_Info.SetItemText(0,1,_T("Axis"));
}
}

调试时发现当运行到ShowCmdInfo(int nIndex)里的时候,m_Teach_ListCtrl和m_List_Cmd_Info全部都为0x0000000000,导致运行程序就崩溃,请问这是怎么回事呢,除了这个其他都没问题,加这个功能就出现这个情况了 类
[解决办法]
CTeachDlg teach;
teach.ShowCmdInfo(nindex);
-------------
这样写不错就奇怪了。不推荐在DrawItem里去处理,listctrl可以捕获到选中事件,在事件响应函数里去处理,就算要在DrawItem里处理,也应该是把要显示的信息通过消息发送给主对话框,然后住对话框再处理显示到m_List_Cmd_Info上。
[解决办法]
直接 对 “对话框上两个列表控件m_Teach_ListCtrl,m_List_Cmd_Info”处理。

[解决办法]
void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//省略....
if (state&ODS_SELECTED)
{CTeachDlg teach;
teach.ShowCmdInfo(nindex);
}
}

drawItem 只负责 draw ,与select 无关。
要响应 SelectChanged
[解决办法]
void CListCtrlDemoDlg::OnItemchangingListCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here

*pResult = 0;
}
或者:

void CListCtrlDemoDlg::OnItemchangedListCtrl(NMHDR* pNMHDR, LRESULT* pResult)


{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

*pResult = 0;
}
在他们中,取出当前 选择项 给 另一个 对话框。

读书人网 >VC/MFC

热点推荐