上次没有解决 望有人来解决

kiddy1010 2006-11-15 05:56:42
还要谢谢上次解决的人 本人实现对一个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控件 所以 对这个问题不是很了解 望哪位能帮忙
...全文
224 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiddy1010 2006-11-16
  • 打赏
  • 举报
回复
代码发给 油箱notoldtree@126.com去了 谢谢
快乐鹦鹉 2006-11-16
  • 打赏
  • 举报
回复
你最好分段调试。逐步将问题定位。然后再诊断问题。
xyz666 2006-11-15
  • 打赏
  • 举报
回复
看的辛苦
Stefine 2006-11-15
  • 打赏
  • 举报
回复
这代码也帖太长了

慢慢调试了

F9 F5 F11
一分之千 2006-11-15
  • 打赏
  • 举报
回复
得调试才能看到哪里错了 你在函数最开头设断点 step by step 看到什么地方提示错误就ok了
mynamelj 2006-11-15
  • 打赏
  • 举报
回复
花这么大的代价啊,把代码发给我.notoldtree@126.com

你这问题,凭眼睛看是很累的,要调试才知道问题在哪.

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧