上次没有解决 望有人来解决
还要谢谢上次解决的人 本人实现对一个CTreeCtrl的双击后 内存报错 有对CTreeCtrl这个比较熟悉的话 代码你们可一看看 帮帮忙
以下是实现对CTreeCtrl双击的代码
void CService_interfaceDlg::OnDblclkUserinfoTree(NMHDR* pNMHDR, LRESULT* pResult)
{
HTREEITEMSelected_next_child,
Selected_first_Sib,
Selected_item,
Selected_next,
m_insertitem;
CStringselectedtext[7];
int Selected_pos=0,
year=0,
month=0,
day=0,
d=0;
chartempbuff[128]={0};
charpInsertStrings[128]={0};
//if(Flag_Finish>0)
//return;
AddUser Edit_User(this);
Selected_item=m_userinfo_tree.GetSelectedItem();
HTREEITEM Parent=m_userinfo_tree.GetRootItem();
HTREEITEM SecectedParent=m_userinfo_tree.GetParentItem(Selected_item);
Selected_first_Sib=m_userinfo_tree.GetChildItem(Parent);
UpdateData(false);
for(int ii=0;ii<User_Num;ii++)
{
if(Selected_first_Sib==Selected_item)
{
Selected_pos=ii;
break;
}
Selected_first_Sib=m_userinfo_tree.GetNextSiblingItem(Selected_first_Sib);
}
if(Parent==SecectedParent)
{
Edit_User.m_adantor=(p_header_user+Selected_pos)->sn;
memcpy(tempbuff,(p_header_user+Selected_pos)->sn,sizeof((p_header_user+Selected_pos)->sn)<7?sizeof((p_header_user+Selected_pos)->sn):7);
tempbuff[8]='\n';
Edit_User.m_email=tempbuff;
memset(tempbuff,0x00,128);
year=(p_header_user+Selected_pos)->staryear;
month=(p_header_user+Selected_pos)->starmonth;
day=(p_header_user+Selected_pos)->stardate;
if(year>2104||year<1752||month<0||day<0||day>31||month>12)
{
year=2006;
month=11;
day=11;
}
CString str;
str.Format("%d-%d-%d",year, month, day);
COleDateTime time(year,month,day,10,10,10);
Edit_User.m_start_time=time;
d=time.GetDay();
// COleDateTime add((p_header_user+Selected_pos)->validdate,0,0,0,0,0);
COleDateTimeSpan add((p_header_user+Selected_pos)->validdate,0,0,0);
Edit_User.m_stoptime=Edit_User.m_start_time+add;
TRACE("%d:%d:%d",Edit_User.m_stoptime.GetYear(),Edit_User.m_stoptime.GetMonth(),Edit_User.m_stoptime.GetDay());
Edit_User.m_status_combo=(p_header_user+Selected_pos)->status;
memcpy(tempbuff,(p_header_user+Selected_pos)->user_e_mail,sizeof((p_header_user+Selected_pos)->user_e_mail)<31?sizeof((p_header_user+Selected_pos)->user_e_mail):31);
tempbuff[32]='\n';
Edit_User.m_email=tempbuff;
memset(tempbuff,0x00,128);
memcpy(tempbuff,(p_header_user+Selected_pos)->user_name,sizeof((p_header_user+Selected_pos)->user_name)<15?sizeof((p_header_user+Selected_pos)->user_name):15);
tempbuff[16]='\n';
Edit_User.m_username=tempbuff;
memset(tempbuff,0x00,128);
memcpy(tempbuff,(p_header_user+Selected_pos)->user_password,sizeof((p_header_user+Selected_pos)->user_password)<15?sizeof((p_header_user+Selected_pos)->user_name):15);
tempbuff[16]='\n';
Edit_User.m_password=tempbuff;
memset(tempbuff,0x00,128);
memcpy(tempbuff,(p_header_user+Selected_pos)->user_telephone,sizeof((p_header_user+Selected_pos)->user_telephone)<15?sizeof((p_header_user+Selected_pos)->user_telephone):15);
Edit_User.m_telephone=tempbuff;
if(Edit_User.DoModal()==IDOK)
{
Selected_pro=m_userinfo_tree.GetNextSiblingItem(Selected_item);
// memset(p_header_user+Selected_pos,0x00,sizeof(t_SHARE_USER_DBASE_INFO));
(p_header_user+Selected_pos)->stardate =Edit_User.m_start_time.GetDay();
(p_header_user+Selected_pos)->starmonth=Edit_User.m_start_time.GetMonth();
(p_header_user+Selected_pos)->staryear=Edit_User.m_start_time.GetYear();
if(Edit_User.m_stoptime>Edit_User.m_start_time)
{
COleDateTimeSpan betweentime=Edit_User.m_stoptime-Edit_User.m_start_time;
(p_header_user+Selected_pos)->validdate=betweentime.GetDays();
}
else
{
(p_header_user+Selected_pos)->validdate=0;
}
memcpy((p_header_user+Selected_pos)->user_name,Edit_User.m_username,Edit_User.m_username.GetLength()<15?Edit_User.m_username.GetLength():15);
Edit_User.m_username="";
memcpy((p_header_user+Selected_pos)->user_password,Edit_User.m_password,Edit_User.m_password.GetLength()<15?Edit_User.m_password.GetLength():15);
Edit_User.m_password="";
memcpy((p_header_user+Selected_pos)->user_e_mail,Edit_User.m_email,Edit_User.m_email.GetLength()<31?Edit_User.m_email.GetLength():31);
Edit_User.m_email="";
memcpy((p_header_user+Selected_pos)->user_telephone,Edit_User.m_telephone,Edit_User.m_telephone.GetLength()<15?Edit_User.m_telephone.GetLength():15);
Edit_User.m_telephone="";
memcpy((p_header_user+Selected_pos)->sn,Edit_User.m_adantor,Edit_User.m_adantor.GetLength()<7?Edit_User.m_adantor.GetLength():7);
(p_header_user+Selected_pos)->status=Edit_User.m_status_combo;
/////////////////////////////////////////////////////////////////////////////////
sprintf(pInsertStrings,"%s%d\n","User",Selected_pos+1);
m_insertitem=m_userinfo_tree.InsertItem(pInsertStrings,m_hRoot,Selected_item);
memset(pInsertStrings,0x00,128);
sprintf(pInsertStrings,"%s%s\n","User Name:",(p_header_user+Selected_pos)->user_name);
m_userinfo_tree.InsertItem(pInsertStrings,m_insertitem);
memset(pInsertStrings,0x00,128);
sprintf(pInsertStrings,"%s%s\n","Pass Word:",(p_header_user+Selected_pos)->user_password);
m_userinfo_tree.InsertItem(pInsertStrings,m_insertitem);
memset(pInsertStrings,0x00,128);
sprintf(pInsertStrings,"%s%-4d-%-2d-%-2d\n","Start Time:",(p_header_user+Selected_pos)->staryear,(p_header_user+Selected_pos)->starmonth,(p_header_user+Selected_pos)->stardate);
m_userinfo_tree.InsertItem(pInsertStrings,m_insertitem);
memset(pInsertStrings,0x00,128);
sprintf(pInsertStrings,"%s%d\n","Validdate:",(p_header_user+Selected_pos)->validdate);
m_userinfo_tree.InsertItem(pInsertStrings,m_insertitem);
memset(pInsertStrings,0x00,128);
sprintf(pInsertStrings,"%s%s\n","E-mail:",(p_header_user+Selected_pos)->user_e_mail);
m_userinfo_tree.InsertItem(pInsertStrings,m_insertitem);
memset(pInsertStrings,0x00,128);
sprintf(pInsertStrings,"%s%s\n","Telephone:",(p_header_user+Selected_pos)->user_telephone);
m_userinfo_tree.InsertItem(pInsertStrings,m_insertitem);
memset(pInsertStrings,0x00,128);
sprintf(pInsertStrings,"%s%s","Adoptor:",(p_header_user+Selected_pos)->sn);
m_userinfo_tree.InsertItem(pInsertStrings,m_insertitem);
memset(pInsertStrings,0x00,128);
if((p_header_user+Selected_pos)->status==0)
{
sprintf(pInsertStrings,"%s%s","Status:","Disable");
}
else
{
sprintf(pInsertStrings,"%s%s","Status:","Enable");
}
if(!m_userinfo_tree.DeleteItem(Selected_item))
{
m_userinfo_tree.InsertItem(pInsertStrings,m_insertitem);
}
m_userinfo_tree.Expand(m_insertitem,TVE_EXPAND);
}
}
*pResult = 0;
}
AddUser Edit_User(this);就是弹出的对话框 等弹出后你如果选OK键就回出现User breakpoint called from code at 0x7c921230 但是可以DEBUG中继续运行 但是多出现几次后 内存就报错了 0x00000008了 肯定是当弹出对话框后点击OK时运行的那些代码
有问题 因为选CANCE不会有这中错误 因为本人第一次用 CTREECTRL控件 所以 对这个问题不是很了解 望哪位能帮忙