根据网上别人的代码,我加进了自己的项目中,但是运行缺出现错误。我贴一部分源码,请高手看看是什么错误具体源码:http://blog.csdn.net/lxspine/archive/2007/04/05/1553149.aspx
通过定义一个继承CTreeCtrl的类来实现改变子项字体和颜色:
首先定义一个字体、颜色的结构体:
protected:
struct Color_Font
{
COLORREF color;
LOGFONT logfont;
};
使用CMap来保存各个Item对应的字体、颜色信息
CMap< void*, void*, Color_Font, Color_Font& > m_mapColorFont ;void CTreeCtrlX::SetItemColor(HTREEITEM hItem, COLORREF color)
{
Color_Font cf;
if( !m_mapColorFont.Lookup( hItem, cf ) )
cf.logfont.lfFaceName[0] = '\0';
cf.color = color;
m_mapColorFont[hItem] = cf;
}
调用:
CMyTree *tree=(CMyTree*)GetDlgItem(IDC_TREE);
.
.
.
tree->SetItemColor(Item,RGB(255,255,255));我主要就是用这个SetItemColor函数,然后调用这个函数运行至if( !m_mapColorFont.Lookup( hItem, cf ) )这一句就会报
myprogramme.exe 中的 0x003f7f69 处未处理的异常: 0xC0000005: 读取位置 0xffffffff 时发生访问冲突
点击中断,跳至代码
if (!AfxIsValidAddress(pOb, pOb->GetRuntimeClass()->m_nObjectSize, FALSE))
{
TRACE(traceAppMsg, 0, "ASSERT_VALID fails with illegal pointer.\n");
if (AfxAssertFailedLine(lpszFileName, nLine))
AfxDebugBreak();
return; // quick escape
}
这是什么问题啊?请高手指教
通过定义一个继承CTreeCtrl的类来实现改变子项字体和颜色:
首先定义一个字体、颜色的结构体:
protected:
struct Color_Font
{
COLORREF color;
LOGFONT logfont;
};
使用CMap来保存各个Item对应的字体、颜色信息
CMap< void*, void*, Color_Font, Color_Font& > m_mapColorFont ;void CTreeCtrlX::SetItemColor(HTREEITEM hItem, COLORREF color)
{
Color_Font cf;
if( !m_mapColorFont.Lookup( hItem, cf ) )
cf.logfont.lfFaceName[0] = '\0';
cf.color = color;
m_mapColorFont[hItem] = cf;
}
调用:
CMyTree *tree=(CMyTree*)GetDlgItem(IDC_TREE);
.
.
.
tree->SetItemColor(Item,RGB(255,255,255));我主要就是用这个SetItemColor函数,然后调用这个函数运行至if( !m_mapColorFont.Lookup( hItem, cf ) )这一句就会报
myprogramme.exe 中的 0x003f7f69 处未处理的异常: 0xC0000005: 读取位置 0xffffffff 时发生访问冲突
点击中断,跳至代码
if (!AfxIsValidAddress(pOb, pOb->GetRuntimeClass()->m_nObjectSize, FALSE))
{
TRACE(traceAppMsg, 0, "ASSERT_VALID fails with illegal pointer.\n");
if (AfxAssertFailedLine(lpszFileName, nLine))
AfxDebugBreak();
return; // quick escape
}
这是什么问题啊?请高手指教
如果你的程序中没有定义一个CMyTree对象来子类化IDC_TREE控件,上面这行代码得到的tree只是MFC临时构造的一个CWnd对象,不能用该对象来访问CMyTree类特有的数据。你可以在对话框类中定义一个CMyTree对象例如m_MyTree,在对话框可的OnInitDialog函数中执行m_MyTree.SubclassDlgItem(IDC_TREE, this)。
这个Item是啥?可能没初始化
但是map是要实例化的
你看是不是这个原因