代码结构如下:
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,一切正常.....