今天碰到的一个复选框的问题

代码结构如下:

 

void CHopeApp::OnLog()
{
 CLogDlg dlg;
 if(dlg.DoModal() == IDOK)
 { 
   if(某条件..)
   {

     做某事情....

    if(dlg.m_check.GetCheck() == BST_CHECKED)
    {

       做某事情.....

    }
   else
   {
   }

}

 

就在调用dlg.m_check.GetCheck()的时候,程序出现异常退出

我纳闷了

 

于是跟随getCheck的代码

 

_AFXWIN_INLINE int CButton::GetCheck() const
 { ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0); }

在ASSERT(...)这里出现错误

看来复选框的句柄是空的

接着我想投机取巧的,把dlg.m_check.GetCheck(),直接改成SendMessage(dlg.m_check, BM_GETCHECK, 0, 0);

想绕过那个ASSERT,结果不管复选框是否选中,SendMessage的结果都是0

 

 

我想,咎其原因,应该是在执行dlg.doModal()以后,dlg这个对象已经被析构了

作为控制型CButton类 m_check也跟着over了

最后我只有老老实实的把复选框的变量改成Bool型Value

把dlg.GetCheck()==BST_CHECKED

语句改成dlg.m_isCheck == TRUE,一切正常.....

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值