用listctrl出现的错误(在线急等)

Jerffsan 2006-10-18 09:07:22
当退出时出现的错误如下:
Buffer overrun detected!
program: ...\Release\FoodDeptV2.0.exe
A buffer overrun has been detected which has corrupted the program's
internal state. The program cannot safely continue execution and must now
be terminated.

当我运用CMyExListCtrl m_list时出现上述错误,但是CListCtrl m_list时则没有错误;
而且当我新建项目运用CMyExListCtrl m_list时,没有错误发生。
并且我用断点调试没有发现错误发生之处?请各位赐教!
...全文
111 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ripyu 2006-10-18
  • 打赏
  • 举报
回复
看代码好像没 什么问题
Jerffsan 2006-10-18
  • 打赏
  • 举报
回复
各位知道什么原因吗?
Jerffsan 2006-10-18
  • 打赏
  • 举报
回复
CMyExListCtrl代码如下:
#include "stdafx.h"
#include "MyExListCtrl.h"
#include ".\myexlistctrl.h"


// CMyExListCtrl

IMPLEMENT_DYNAMIC(CMyExListCtrl, CListCtrl)
CMyExListCtrl::CMyExListCtrl()
: nItem(0)
, nSubItem(0)
, m_ItemClicked(0)
{
}

CMyExListCtrl::~CMyExListCtrl()
{
}


BEGIN_MESSAGE_MAP(CMyExListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(NM_CLICK, OnNMClick)
ON_NOTIFY_REFLECT(NM_DBLCLK, OnNMDblclk)
ON_WM_CHAR()
END_MESSAGE_MAP()



// CMyExListCtrl 消息处理程序

CString CMyExListCtrl::GetItemText(HWND hWnd, int nItem , int nSubItem)
{
LVITEM lvi;
memset(&lvi, 0, sizeof(LVITEM));
lvi.iSubItem = nSubItem;
CString str;
int nLen = 128;
int nRes;
do
{
nLen *= 2;
lvi.cchTextMax = nLen;
lvi.pszText = str.GetBufferSetLength(nLen);
nRes = (int)::SendMessage(hWnd, LVM_GETITEMTEXT, (WPARAM)nItem,(LPARAM)&lvi);
//nRes = (int) ::SendMessage(hWnd,LVM_GETITEMTEXT,(WPARAM)&lvi,(LPARAM)nItem);
} while (nRes == nLen-1);
str.ReleaseBuffer();
return str;
}

void CMyExListCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
LPNMLISTVIEW temp1 = (LPNMLISTVIEW)pNMHDR;
CString str = this->GetItemText(nItem,nSubItem);
CString str1 ;
if (m_ceEdit.GetSafeHwnd() != NULL)
{
m_ceEdit.GetWindowText(str1);
if ( str.Compare(str1) != 0)
SetItemText(nItem,nSubItem,str1);
m_ceEdit.DestroyWindow();
}

m_ItemClicked = temp1->iItem ;


*pResult = 0;
}

void CMyExListCtrl::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE)pNMHDR;
HWND hWnd = this->GetSafeHwnd();
nItem = temp->iItem;
nSubItem = temp->iSubItem ;
CString str = GetItemText(hWnd,nItem,nSubItem);
if ( nItem == -1 || nSubItem == -1 || nSubItem == 0)
return ;
CRect rect;
if (!GetSubItemRect(nItem,nSubItem,LVIR_BOUNDS,rect))
return ;
m_ceEdit.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL,rect,this,1);
m_ceEdit.SetFont(this->GetFont());

m_ceEdit.SetFocus();
m_ceEdit.SetWindowText(str);

*pResult = 0;
}

CString CMyExListCtrl::GetItemText(int nItem,int nSubItem)
{
return CListCtrl::GetItemText(nItem,nSubItem);
}
doudouHuY 2006-10-18
  • 打赏
  • 举报
回复
CMyExListCtrl 构造函数有问题?
上代码

16,550

社区成员

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

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

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