一个异常忙活了一下午了,我晕。。。。。。

sc_valentine21 2011-01-14 06:32:12
调试时,断言失败。

..\3077\vc\MFCATL\ship\atlmfc\include\afxwin2.inLine: 619

点击重试

Unhandled exception at 0x7c29112b (mfc71d.dll) in XXX.exe: User breakpoint.

搞不懂了。

请问有遇到类似问题的兄弟没?帮忙指点下迷津,谢谢。
...全文
149 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sc_valentine21 2011-01-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ghostjeky 的回复:]
m_hWnd是在DDX中赋值的,而DDX是在CDialog::OnInitDialog()里调用的,你是不是在CDialog::OnInitDialog()之前就调用了CButton::SetButtonStyle了啊?
[/Quote]


真是这个问题,打了断点,DoDataExchange没进去,原来基类OnInitDialog竟然没有调用CDialog::OnInitDialog(),直接return TRUE了。
sxqinge 2011-01-14
  • 打赏
  • 举报
回复
把所有断点都去掉,CLEAN后重新编译运行下看看?
zgsdzhaolanxiang1 2011-01-14
  • 打赏
  • 举报
回复
我当年也遇到过一个困扰我很长时间的断言失败,,
原因是子窗口没创建 就在 movewindow中改变子窗口的大小
ghostjeky 2011-01-14
  • 打赏
  • 举报
回复
m_hWnd是在DDX中赋值的,而DDX是在CDialog::OnInitDialog()里调用的,你是不是在CDialog::OnInitDialog()之前就调用了CButton::SetButtonStyle了啊?
varding 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sc_valentine21 的回复:]

C/C++ code

m_btnNum0.SetBitmaps(NUM0_NORMAL, NUM0_HOVER ,NUM0_DOWN);



CButtonEx m_btnMore;

m_btnNum0是 一个CButtonEx,提示是其句柄无效?怎么会这样?
[/Quote]

你在哪儿调用的?不要在窗口还没创建的时候就调用这个了,比如:构造函数里就不能调用,窗口还没创建
lyingbo 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sc_valentine21 的回复:]
C/C++ code

_AFXWIN_INLINE void CButton::SetButtonStyle(UINT nStyle, BOOL bRedraw)
{ ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, BM_SETSTYLE, nStyle, (LPARAM)bRedraw); }
[/Quote]

那你要看下m_hWnd这个成员的值了,检查下有没问题
sc_valentine21 2011-01-14
  • 打赏
  • 举报
回复
或者是哪里隐藏着问题?
sc_valentine21 2011-01-14
  • 打赏
  • 举报
回复
直接控件关联的,不用Create吧。

那么为什么会这样?顺序问题?
lyingbo 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sc_valentine21 的回复:]
怎么会这样?那是一个按钮,直接关联的。

C/C++ code

DDX_Control(pDX, IDC_BUTTON_NUM0, m_btnNum0);
[/Quote]

如果是按钮的话,那应该不会出这种错误的断言才对啊
sc_valentine21 2011-01-14
  • 打赏
  • 举报
回复
怎么会这样?那是一个按钮,直接关联的。

DDX_Control(pDX, IDC_BUTTON_NUM0, m_btnNum0);
lyingbo 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sc_valentine21 的回复:]
C/C++ code

m_btnNum0.SetBitmaps(NUM0_NORMAL, NUM0_HOVER ,NUM0_DOWN);



CButtonEx m_btnMore;

m_btnNum0是 一个CButtonEx,提示是其句柄无效?怎么会这样?
[/Quote]

你的m_btnMore还没有Create吧,当然不是一个有效地窗口
微笑的鱼 2011-01-14
  • 打赏
  • 举报
回复
m_hWnd句柄为空?
lyingbo 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sc_valentine21 的回复:]
C/C++ code

_AFXWIN_INLINE void CButton::SetButtonStyle(UINT nStyle, BOOL bRedraw)
{ ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, BM_SETSTYLE, nStyle, (LPARAM)bRedraw); }
[/Quote]

说明你的调用SetButtonStyle函数的对象不是一个合法的windows窗口
sc_valentine21 2011-01-14
  • 打赏
  • 举报
回复

m_btnNum0.SetBitmaps(NUM0_NORMAL, NUM0_HOVER ,NUM0_DOWN);


CButtonEx m_btnMore;

m_btnNum0是 一个CButtonEx,提示是其句柄无效?怎么会这样?
sc_valentine21 2011-01-14
  • 打赏
  • 举报
回复

_AFXWIN_INLINE void CButton::SetButtonStyle(UINT nStyle, BOOL bRedraw)
{ ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, BM_SETSTYLE, nStyle, (LPARAM)bRedraw); }
varding 2011-01-14
  • 打赏
  • 举报
回复
把出线异常的那段代码贴出来
covsno 2011-01-14
  • 打赏
  • 举报
回复
打开afxwin2.inl
看看619行的代码

16,472

社区成员

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

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

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