OnDestroy//消息处理函数不是点击×,才会相应吗?

OnDestroy//消息处理函数不是点击×,才会相应吗?//怎么去掉if(1==bkMap)就会内存错误?

void CJune22_tooltestDlg::OnDestroy()
{
CDialogEx::OnDestroy();
// TODO: Add your message handler code here
if (1==bkMap)
{
bkMap=0;
pMemDC.SelectObject(pOldBitmap);
pMemDC2.SelectObject(pOldBitmap2);
pMemDC3.SelectObject(pOldBitmap3);
pMemDC4.SelectObject(pOldBitmap4); 
}
}

白衣染霜花
浏览 1196回答 3
3回答

三国纷争

加上1==bkMap是对的,这样处理比较安全。不知道你创建的地方在哪,不好确定1==bkMap是否可以去掉。一般来说,如果你是模态对话框,去掉应该是可以的,如果是非模态,那么在反复调用是可能会报错。这里是一个MFC的逻辑问题,因为OnDestroy销毁的是窗口而不是类,而Dialog作为一个“窗口类”,OnDestroy被混淆了。销毁类的函数是类析构函数。

四季花海

改成下面这样试试void CJune22_tooltestDlg::OnDestroy(){if (1==bkMap){bkMap=0;pMemDC.SelectObject(pOldBitmap);pMemDC2.SelectObject(pOldBitmap2);pMemDC3.SelectObject(pOldBitmap3);pMemDC4.SelectObject(pOldBitmap4);}CDialogEx::OnDestroy();// TODO: Add your message handler code here}

慕妹3146593

(1==bkMap)为真{bkMap=0;pMemDC.SelectObject(pOldBitmap);pMemDC2.SelectObject(pOldBitmap2);pMemDC3.SelectObject(pOldBitmap3);pMemDC4.SelectObject(pOldBitmap4);}才能执行,可能是只有(1==bkMap)为真时里面的各个值才有效。
打开App,查看更多内容
随时随地看视频慕课网APP