今天给根据别人改的方法重新修改了Alarm Store Simulator,加了一个check box,直接用(CButton*)GetDlgItem(IDC_CHECKBOXXX)->GetCheck();获得当前checkbox的状态,当然还能用SetCheck()更改,可是当关闭对话框的时候竟然报xxxxxx memory can not be read xxxxxxx的错误,单步进去发现死在dialog的析构函数上了,结果给这个从CDialog中继承的对话框加了一个空的析构函数,然后问题解决,可以成功关闭对话框,现在还没弄懂,这个问题有待进一步分析。。。
知道要用空析构函数的原因了: 如果给一个从Cdialog中继承的窗口类添加了WM_SIZE消息响应函数,则一定要定义窗口的析构函数,否则会报错,哪怕是空的析构函数也可以避免错误。
另外,AfxGetMainWnd()->UpdateData(TRUE);不能随便用,滥用的结果是程序会出windows常规错误窗口,提示abort or retry or cancel, 会死在里面dodataex中,也可能是由于多线程的原因,还没弄清楚,反正要慎重,一般的控件用setwindowstext就可以显示新的控件内容了。