如果我在OnTimer中一直运行以下代码,会不会导至DC资源耗尽?
void CMyDlg::OnTimer(UINT nIDEvent)
{
if (GetStatus())
{
HBITMAP hbitEme=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_ON));
((CStatic *)GetDlgItem(IDC_PIC_STATUS))->SetBitmap(hbitEme);
}else
{
HBITMAP hbitEme=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_OFF));
((CStatic *)GetDlgItem(IDC_PIC_STATUS))->SetBitmap(hbitEme);
}
...
} 现在我在一个项目中使用了以上代码,然后让程序一直运行,发现偶尔会出现DC资源耗尽,也就是屏幕乱显示,关闭后再启运又正常了,就好像没有释放DC时长期运行后出现的现象。
不知是否是上面代码的原因,又或许是其它原因。
void CMyDlg::OnTimer(UINT nIDEvent)
{
if (GetStatus())
{
HBITMAP hbitEme=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_ON));
((CStatic *)GetDlgItem(IDC_PIC_STATUS))->SetBitmap(hbitEme);
}else
{
HBITMAP hbitEme=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_OFF));
((CStatic *)GetDlgItem(IDC_PIC_STATUS))->SetBitmap(hbitEme);
}
...
} 现在我在一个项目中使用了以上代码,然后让程序一直运行,发现偶尔会出现DC资源耗尽,也就是屏幕乱显示,关闭后再启运又正常了,就好像没有释放DC时长期运行后出现的现象。
不知是否是上面代码的原因,又或许是其它原因。
不然,肯定出问题!
你可以查查MSDN
HBITMAP m_hbitEmeOn;
HBITMAP m_hbitEmeOff;放在初始化函数里,如OnInitDialog
m_hbitEmeOn=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_ON));
m_hbitEmeOff=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_OFF));void CMyDlg::OnTimer(UINT nIDEvent)
{
if (GetStatus())
{
((CStatic *)GetDlgItem(IDC_PIC_STATUS))->SetBitmap(m_hbitEmeOn);
}else
{
((CStatic *)GetDlgItem(IDC_PIC_STATUS))->SetBitmap(m_hbitEmeOff);
}
...
}
if (GetStatus())
{
GetDlgItem(IDC_PIC_STATUS_ON)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_PIC_STATUS_OFF)->ShowWindow(SW_HIDE);
}else
{
GetDlgItem(IDC_PIC_STATUS_ON)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_PIC_STATUS_OFF)->ShowWindow(SW_SHOW);
}
应该也可以解决,我正在测试,如果还会出现DC资源耗尽,那就需要考虑其它的原因。
多谢各位。