记录Debug Assertion Failed! Program: C:\windows\system32\mfc140ud.dll

记录一个问题

新建的一个 mfc的CFormView工程,在状态栏输出当前鼠标的位置。

记录Debug Assertion Failed! Program: C:\windows\system32\mfc140ud.dll_第1张图片

像这样,先在视图类窗口获取父窗口(框架类窗口),

转换后用框架类窗口对象去调用这个对象内部的状态栏成员变量m_wndStatusBar 。

然后用setwindowText函数去设置显示的内容。

运行发现,鼠标在子窗口一动,程序就死掉了

记录Debug Assertion Failed! Program: C:\windows\system32\mfc140ud.dll_第2张图片

记录Debug Assertion Failed! Program: C:\windows\system32\mfc140ud.dll_第3张图片

调试发现,getparent() 这个函数获得的CMainFrame对应的句柄和咱们的框架窗口的句柄不是一个。

 

GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str);

用这个方法也不行。

 

为什么?????无从得知。。。有人知道可以留言解惑,万分感谢!!

解决办法:把GetParent() 换成 AfxGetMainWnd()就行了,或者 采用另外的修改状态栏的方法。

一共 有下面几种方法;

((CMainFrame*)AfxGetMainWnd())->m_wndStatusBar.SetWindowText(str);

((CMainFrame*)GetParent())->SetMessageText(str);

((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str);

AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str);

 

 

——END

 

你可能感兴趣的:(C++)