pDC->SetBkColor(RGB(0,0,0));
pDC->SetTextColor(RGB(128,255,0));
bodyfont.CreatePointFont(124,_T("宋体"),pDC);
pDC->SelectObject(&bodyfont);
for (int i=0;i<25;i++)
{
CPoint pt(35,i*16+80);
CSize sz(720, 16);
CRect rect(pt, sz);
pDC->DrawText(st_data[i],rect,DT_LEFT);
}
bodyfont.DeleteObject();
大家帮忙看看,不甚感激!
17 个解决方案
#1
在堆栈中看是以上哪个语句产生的断言错误。
#2
虽然没看懂LZ的意思
但是你的代码:
pDC->SelectObject(&bodyfont);
//.....
bodyfont.DeleteObject();
就是有问题的
你应该这样:
CFont* pOldFont = pDC->SelectObject(&bodyfont);
//...
pDC->SelectObject(pOldFont);
bodyfont.DeleteObject();//如果bodyfont是本地变量, CFont 的实例析构时, 会自动调用, 不用多此一举
但是你的代码:
pDC->SelectObject(&bodyfont);
//.....
bodyfont.DeleteObject();
就是有问题的
你应该这样:
CFont* pOldFont = pDC->SelectObject(&bodyfont);
//...
pDC->SelectObject(pOldFont);
bodyfont.DeleteObject();//如果bodyfont是本地变量, CFont 的实例析构时, 会自动调用, 不用多此一举
#3
CFont类的创建和使用出问题了,但是不知道哪有问题。
#4
谢谢,这样我也试过了,但是还是有问题!如果没有隐藏静态文本控件的时候输出是正确的,但是当隐藏控件后,才有这个断言……
#5
换个字体行吗?
#6
光从你贴出来的代码, 看不出什么问题, 既然出现断言失败, 你看看调用堆栈, 问题的出现是在哪个函数, 哪条语句, 贴出相关代码出来看看
#7
CFont类之前是不是已经关联过字体Object了。。。
#8
这个倒没试过,试试看……
#9
是这样的把定义字体和选入设备描述表和从设备描述表中删除的三条语句删除后就可以了,但是我需要修改字体啊!代码很长……
#10
没有耶!
#11
我估计bodyfont.CreatePointFont(124,_T("宋体"),pDC);根本就是失败的,你不检查返回值就直接使用,是非常危险的
至少写成
if(!bodyfont.CreatePointFont(124,_T("宋体"),pDC))
{
TRACE(_T("Cannot create fond:%d\n"), GetLastError());
return;
}
另外:这个函数的第一个参数应该是实际高度的10倍,124不是10的整数倍,是不撒有问题?
至少写成
if(!bodyfont.CreatePointFont(124,_T("宋体"),pDC))
{
TRACE(_T("Cannot create fond:%d\n"), GetLastError());
return;
}
另外:这个函数的第一个参数应该是实际高度的10倍,124不是10的整数倍,是不撒有问题?
#12
确保bodyfont是临时变量,不要是类成员变量或者static变量
#13
是这样的把定义字体和选入设备描述表和从设备描述表中删除的三条语句删除后就可以了,但是我需要修改字体啊!代码很长
============
即使这样也不一定就能断定是那三条语句的问题。
============
即使这样也不一定就能断定是那三条语句的问题。
#14
谢谢,我的就是类成员变量,可是为什么不能是类成员呢?看来还有好多东东要学呢!
#15
应该是的,因为在堆栈中调试是bodyfont的object不是NULL
#16
因为如果你使用类成员对象,你就必须确保在使用前DeleteObject倍调用成功。恐怕你函数在DeleteObject方面有可能失败或者根本没调用过
#17
[Quote=引用 16 楼 arong1234 的回复:]
因为如果你使用类成员对象,你就必须确保在使用前DeleteObject倍调用成功。恐怕你函数在DeleteObject方面有可能失败或者根本没调用过
引用 14 楼 xue_yang 的回复:
引用 12 楼 arong1234 的回复:
谢谢,我的就是类成员变量,可是为什么不能是类成员呢?看来还有好多东东要学呢
[/Quo]
谢谢雷人!问题解决,正如你所说,分都给你了。
因为如果你使用类成员对象,你就必须确保在使用前DeleteObject倍调用成功。恐怕你函数在DeleteObject方面有可能失败或者根本没调用过
引用 14 楼 xue_yang 的回复:
引用 12 楼 arong1234 的回复:
谢谢,我的就是类成员变量,可是为什么不能是类成员呢?看来还有好多东东要学呢
[/Quo]
谢谢雷人!问题解决,正如你所说,分都给你了。
#1
在堆栈中看是以上哪个语句产生的断言错误。
#2
虽然没看懂LZ的意思
但是你的代码:
pDC->SelectObject(&bodyfont);
//.....
bodyfont.DeleteObject();
就是有问题的
你应该这样:
CFont* pOldFont = pDC->SelectObject(&bodyfont);
//...
pDC->SelectObject(pOldFont);
bodyfont.DeleteObject();//如果bodyfont是本地变量, CFont 的实例析构时, 会自动调用, 不用多此一举
但是你的代码:
pDC->SelectObject(&bodyfont);
//.....
bodyfont.DeleteObject();
就是有问题的
你应该这样:
CFont* pOldFont = pDC->SelectObject(&bodyfont);
//...
pDC->SelectObject(pOldFont);
bodyfont.DeleteObject();//如果bodyfont是本地变量, CFont 的实例析构时, 会自动调用, 不用多此一举
#3
CFont类的创建和使用出问题了,但是不知道哪有问题。
#4
谢谢,这样我也试过了,但是还是有问题!如果没有隐藏静态文本控件的时候输出是正确的,但是当隐藏控件后,才有这个断言……
#5
换个字体行吗?
#6
光从你贴出来的代码, 看不出什么问题, 既然出现断言失败, 你看看调用堆栈, 问题的出现是在哪个函数, 哪条语句, 贴出相关代码出来看看
#7
CFont类之前是不是已经关联过字体Object了。。。
#8
这个倒没试过,试试看……
#9
是这样的把定义字体和选入设备描述表和从设备描述表中删除的三条语句删除后就可以了,但是我需要修改字体啊!代码很长……
#10
没有耶!
#11
我估计bodyfont.CreatePointFont(124,_T("宋体"),pDC);根本就是失败的,你不检查返回值就直接使用,是非常危险的
至少写成
if(!bodyfont.CreatePointFont(124,_T("宋体"),pDC))
{
TRACE(_T("Cannot create fond:%d\n"), GetLastError());
return;
}
另外:这个函数的第一个参数应该是实际高度的10倍,124不是10的整数倍,是不撒有问题?
至少写成
if(!bodyfont.CreatePointFont(124,_T("宋体"),pDC))
{
TRACE(_T("Cannot create fond:%d\n"), GetLastError());
return;
}
另外:这个函数的第一个参数应该是实际高度的10倍,124不是10的整数倍,是不撒有问题?
#12
确保bodyfont是临时变量,不要是类成员变量或者static变量
#13
是这样的把定义字体和选入设备描述表和从设备描述表中删除的三条语句删除后就可以了,但是我需要修改字体啊!代码很长
============
即使这样也不一定就能断定是那三条语句的问题。
============
即使这样也不一定就能断定是那三条语句的问题。
#14
谢谢,我的就是类成员变量,可是为什么不能是类成员呢?看来还有好多东东要学呢!
#15
应该是的,因为在堆栈中调试是bodyfont的object不是NULL
#16
因为如果你使用类成员对象,你就必须确保在使用前DeleteObject倍调用成功。恐怕你函数在DeleteObject方面有可能失败或者根本没调用过
#17
[Quote=引用 16 楼 arong1234 的回复:]
因为如果你使用类成员对象,你就必须确保在使用前DeleteObject倍调用成功。恐怕你函数在DeleteObject方面有可能失败或者根本没调用过
引用 14 楼 xue_yang 的回复:
引用 12 楼 arong1234 的回复:
谢谢,我的就是类成员变量,可是为什么不能是类成员呢?看来还有好多东东要学呢
[/Quo]
谢谢雷人!问题解决,正如你所说,分都给你了。
因为如果你使用类成员对象,你就必须确保在使用前DeleteObject倍调用成功。恐怕你函数在DeleteObject方面有可能失败或者根本没调用过
引用 14 楼 xue_yang 的回复:
引用 12 楼 arong1234 的回复:
谢谢,我的就是类成员变量,可是为什么不能是类成员呢?看来还有好多东东要学呢
[/Quo]
谢谢雷人!问题解决,正如你所说,分都给你了。