断言错误 在ASSERT(m_hObject == NULL)

时间:2021-01-03 18:35:10
我设置了CFont* m_pFont; 

但是程序运行之后提示我  断言错误 在ASSERT(m_hObject == NULL)  
完整的是_AFXWIN_INLINE int CFont::GetLogFont(LOGFONT* pLogFont)
{ ASSERT(m_hObject != NULL);     //////////////////////停在此处
return ::GetObject(m_hObject, sizeof(LOGFONT), pLogFont); }

开始以为是没有创建  但是再后面的函数里我实现了m_pFont依然提示我这样的错误
void CRichToolTipDemoRichEditCtrl::InitMyEditCtrl()
{
LOGFONT lf;  
HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
GetObject(hFont, sizeof(LOGFONT), &lf);
m_pFont= new CFont;
m_pFont->CreateFont(-12,0,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"宋体");
m_colorsel=RGB(00,00,255); // Blue 
}
不知道怎么回事儿?!  请教各位大侠

13 个解决方案

#1


GetLogFont 这个是给系统自己调用的么

#2


HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
ASSERT(hFont);//看这里是否成功?

#3


让m_pFont声明成临时变量,不要是类成员变量或者static变量,试试

#5


m_pFont->CreateFont 失败
看看返回值,如果失败调用GetLastError()查看错误信息

#6


1.你用的字体变量是否引用对了?
2。CreateFont 是否建立成功

#7


你要单步一下,貌似你这句有问题HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
如果你解决不聊,我建议你可以改用:

// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.

CClientDC dc(this);

CFont font;
VERIFY(font.CreatePointFont(120, "Arial", &dc));

// Do something with the font just created...
CFont* def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, "Hello", 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
font.DeleteObject();

#8


提示我
我是这样写的
 public:
CFont* m_pFont;
实现文件中
    LOGFONT lf;
m_richedit_msg.m_pFont->GetLogFont(&lf);   //取得消息的字体格式
查了下m_pFont和&lf 的值,都是提示&lf CXX0017: 错误: 没有找到符号“lf”
这个是怎么回事儿呢?
我已经new  和 create过了m_pFont    不过还是出现这个问题
另外是m_richedit_msg是DDX_Control(pDX, IDC_MSG, m_richedit_msg);
想取得窗体内输入的字符格式~~ 所以就这么m_richedit_msg.m_pFont->GetLogFont(&lf)写了

请大侠指导

#9


引用 2 楼 zgl7903 的回复:
HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
ASSERT(hFont);//看这里是否成功?

不成功!?

#10


引用 7 楼 chenjintaoxp 的回复:
你要单步一下,貌似你这句有问题HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
如果你解决不聊,我建议你可以改用:
C/C++ code

// The code fragment shows how to create a font object,
// select the font object into a DC (device c……

用了你给你的代码   还是不好用啊 

#11


帮顶了~~一起学习~

#12


引用 11 楼 dcdc98 的回复:
帮顶了~~一起学习~

感谢帮顶了!!!

#13


引用 6 楼 gameslq 的回复:
1.你用的字体变量是否引用对了?
2。CreateFont 是否建立成功

提示 m_pFont->CreateFont CXX0017: 错误: 没有找到符号“m_pFont”
没有字体变量m_pFont,所以创建就不成功了!! 不过为什么创建不成功呢?
命名在类成员里声明了啊!怎样解决这个问题?
因为是想得到窗体里的字体,所以在类里声明了,如果弄成临时变量的话,怎么能够得到窗体的值呢?

#1


GetLogFont 这个是给系统自己调用的么

#2


HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
ASSERT(hFont);//看这里是否成功?

#3


让m_pFont声明成临时变量,不要是类成员变量或者static变量,试试

#4


#5


m_pFont->CreateFont 失败
看看返回值,如果失败调用GetLastError()查看错误信息

#6


1.你用的字体变量是否引用对了?
2。CreateFont 是否建立成功

#7


你要单步一下,貌似你这句有问题HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
如果你解决不聊,我建议你可以改用:

// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.

CClientDC dc(this);

CFont font;
VERIFY(font.CreatePointFont(120, "Arial", &dc));

// Do something with the font just created...
CFont* def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, "Hello", 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
font.DeleteObject();

#8


提示我
我是这样写的
 public:
CFont* m_pFont;
实现文件中
    LOGFONT lf;
m_richedit_msg.m_pFont->GetLogFont(&lf);   //取得消息的字体格式
查了下m_pFont和&lf 的值,都是提示&lf CXX0017: 错误: 没有找到符号“lf”
这个是怎么回事儿呢?
我已经new  和 create过了m_pFont    不过还是出现这个问题
另外是m_richedit_msg是DDX_Control(pDX, IDC_MSG, m_richedit_msg);
想取得窗体内输入的字符格式~~ 所以就这么m_richedit_msg.m_pFont->GetLogFont(&lf)写了

请大侠指导

#9


引用 2 楼 zgl7903 的回复:
HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
ASSERT(hFont);//看这里是否成功?

不成功!?

#10


引用 7 楼 chenjintaoxp 的回复:
你要单步一下,貌似你这句有问题HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
如果你解决不聊,我建议你可以改用:
C/C++ code

// The code fragment shows how to create a font object,
// select the font object into a DC (device c……

用了你给你的代码   还是不好用啊 

#11


帮顶了~~一起学习~

#12


引用 11 楼 dcdc98 的回复:
帮顶了~~一起学习~

感谢帮顶了!!!

#13


引用 6 楼 gameslq 的回复:
1.你用的字体变量是否引用对了?
2。CreateFont 是否建立成功

提示 m_pFont->CreateFont CXX0017: 错误: 没有找到符号“m_pFont”
没有字体变量m_pFont,所以创建就不成功了!! 不过为什么创建不成功呢?
命名在类成员里声明了啊!怎样解决这个问题?
因为是想得到窗体里的字体,所以在类里声明了,如果弄成临时变量的话,怎么能够得到窗体的值呢?