void CSonicView::InitalMemDc()
{
CBrush brushBack;
brushBack.CreateSolidBrush( m_crBackColor) ;
CRect rectClient;
GetClientRect(rectClient);
CClientDC dc(this);
//创建设备环境以及创建相应缓冲区
if ( m_MemDC.GetSafeHdc() != NULL )
{
if ( m_pOldBmp != NULL )
{
m_MemDC.SelectObject(m_pOldBmp);
}
m_Bitmap.DeleteObject();
m_MemDC.Detach();
m_MemDC.DeleteDC();
}
if (m_MemDC.GetSafeHdc() == NULL)
{
m_MemDC.CreateCompatibleDC(&dc);
if(m_Bitmap.CreateCompatibleBitmap(&dc,rectClient.Width(), m_BitmapHeight) == NULL )
{
CString strTmp = "请关闭软件重新打开!";
AfxMessageBox(strTmp);
}
m_pOldBmp = m_MemDC.SelectObject(&m_Bitmap);
}
//设置背景颜色
m_MemDC.SetBkColor( m_crBackColor);
rectClient.bottom = m_BitmapHeight; //填充背景色时背景的高度
m_MemDC.FillRect(rectClient,&brushBack);
brushBack.DeleteObject();}void CSonicView::DrawStandardColor()
{
CBrush redbrush, greenbrush,yellowbrush, orangebrush;
CBrush *oldBrush;
redbrush.CreateSolidBrush( RGB(255, 0, 0));
yellowbrush.CreateSolidBrush( RGB(255, 255, 128));
orangebrush.CreateSolidBrush( RGB(192, 192, 0));
greenbrush.CreateSolidBrush( RGB( 0, 255, 0));
oldBrush = m_MemDC.SelectObject(&redbrush); CFont Font,*oldFont;
Font.CreateFont (14, 0, 0, 0, 300,
FALSE, FALSE, 0, ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, _T("宋体")) ;
oldFont = m_MemDC.SelectObject(&Font);
if (m_MemDC.GetSafeHdc() != NULL)
{
CRect rectClient;
GetClientRect(rectClient) ; CPoint ptOld; ptOld.x = rectClient.left + 50;
ptOld.y = 2;
CRect rc(ptOld.x, ptOld.y, ptOld.x + 50, ptOld.y+16);
m_MemDC.FillRect(rc, &greenbrush);
m_MemDC.TextOut(ptOld.x+52, ptOld.y, "均正常");
ptOld.x += rectClient.right/4;
CRect rc1(ptOld.x, ptOld.y, ptOld.x + 50, ptOld.y+16);
m_MemDC.FillRect(rc1, &yellowbrush);
m_MemDC.TextOut(ptOld.x+55, ptOld.y, "声速异常");
ptOld.x += rectClient.right/4;
CRect rc2(ptOld.x, ptOld.y, ptOld.x + 50, ptOld.y+16);
m_MemDC.FillRect(rc2, &orangebrush);
m_MemDC.TextOut(ptOld.x + 55, ptOld.y, "幅值异常");
ptOld.x += rectClient.right/4;
CRect rc3(ptOld.x, ptOld.y, ptOld.x + 50, ptOld.y+16);
m_MemDC.FillRect(rc3, &redbrush);
m_MemDC.TextOut(ptOld.x+55, ptOld.y, "均异常");
}
m_MemDC.SelectObject(oldFont);
Font.DeleteObject();
m_MemDC.SelectObject(oldBrush);
greenbrush.DeleteObject();
orangebrush.DeleteObject();
yellowbrush.DeleteObject();
redbrush.DeleteObject();
}
{
CBrush brushBack;
brushBack.CreateSolidBrush( m_crBackColor) ;
CRect rectClient;
GetClientRect(rectClient);
CClientDC dc(this);
//创建设备环境以及创建相应缓冲区
if ( m_MemDC.GetSafeHdc() != NULL )
{
if ( m_pOldBmp != NULL )
{
m_MemDC.SelectObject(m_pOldBmp);
}
m_Bitmap.DeleteObject();
m_MemDC.Detach();
m_MemDC.DeleteDC();
}
if (m_MemDC.GetSafeHdc() == NULL)
{
m_MemDC.CreateCompatibleDC(&dc);
if(m_Bitmap.CreateCompatibleBitmap(&dc,rectClient.Width(), m_BitmapHeight) == NULL )
{
CString strTmp = "请关闭软件重新打开!";
AfxMessageBox(strTmp);
}
m_pOldBmp = m_MemDC.SelectObject(&m_Bitmap);
}
//设置背景颜色
m_MemDC.SetBkColor( m_crBackColor);
rectClient.bottom = m_BitmapHeight; //填充背景色时背景的高度
m_MemDC.FillRect(rectClient,&brushBack);
brushBack.DeleteObject();}void CSonicView::DrawStandardColor()
{
CBrush redbrush, greenbrush,yellowbrush, orangebrush;
CBrush *oldBrush;
redbrush.CreateSolidBrush( RGB(255, 0, 0));
yellowbrush.CreateSolidBrush( RGB(255, 255, 128));
orangebrush.CreateSolidBrush( RGB(192, 192, 0));
greenbrush.CreateSolidBrush( RGB( 0, 255, 0));
oldBrush = m_MemDC.SelectObject(&redbrush); CFont Font,*oldFont;
Font.CreateFont (14, 0, 0, 0, 300,
FALSE, FALSE, 0, ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, _T("宋体")) ;
oldFont = m_MemDC.SelectObject(&Font);
if (m_MemDC.GetSafeHdc() != NULL)
{
CRect rectClient;
GetClientRect(rectClient) ; CPoint ptOld; ptOld.x = rectClient.left + 50;
ptOld.y = 2;
CRect rc(ptOld.x, ptOld.y, ptOld.x + 50, ptOld.y+16);
m_MemDC.FillRect(rc, &greenbrush);
m_MemDC.TextOut(ptOld.x+52, ptOld.y, "均正常");
ptOld.x += rectClient.right/4;
CRect rc1(ptOld.x, ptOld.y, ptOld.x + 50, ptOld.y+16);
m_MemDC.FillRect(rc1, &yellowbrush);
m_MemDC.TextOut(ptOld.x+55, ptOld.y, "声速异常");
ptOld.x += rectClient.right/4;
CRect rc2(ptOld.x, ptOld.y, ptOld.x + 50, ptOld.y+16);
m_MemDC.FillRect(rc2, &orangebrush);
m_MemDC.TextOut(ptOld.x + 55, ptOld.y, "幅值异常");
ptOld.x += rectClient.right/4;
CRect rc3(ptOld.x, ptOld.y, ptOld.x + 50, ptOld.y+16);
m_MemDC.FillRect(rc3, &redbrush);
m_MemDC.TextOut(ptOld.x+55, ptOld.y, "均异常");
}
m_MemDC.SelectObject(oldFont);
Font.DeleteObject();
m_MemDC.SelectObject(oldBrush);
greenbrush.DeleteObject();
orangebrush.DeleteObject();
yellowbrush.DeleteObject();
redbrush.DeleteObject();
}
解决方案 »
- 创建一个系统服务,如何让暂停和恢复可用.
- 基于UDP连接和基于TCP连接socket编程的分别应用
- CTreeCtrl的一个问题,编译正确,运行出错晕!
- SetForegroundWindow
- 扩展名exe的组件,比com好在那里?
- 图象合成问题!
- 我用Boundschecker检查内存泄露。结果说我像成错误如下,请大家帮忙看看
- 为什么调用SetModifiedFlag(true)之后不会立即调用DoPropExchange()函数???
- ATL多线程:使用CoMarshalInterThreadInterfaceInStream的结果不对
- vc一移植到evc下面出错
- vc++中FlexGrid控件是如何合并相邻单元格
- VFW视频捕捉问题
那我写的画图界面怎么随着更新次数的增加就不能再画了
会出现CString strTmp = "请关闭软件重新打开!";
AfxMessageBox(strTmp);
这两行代码的执行窗口。
GetClientRect(rectClient);获取的rectClient是否是(0,0,0,0)
CClientDC dc(this);this指针是否有效?
现在估计就是资源泄漏的问题。我想可能出现的地方就是这两个函数里面。请大家帮忙看看InitalMemDc()函数放在OnPaint() 里面和其他地方有什么区别啊?void CWaveView::OnPaint()
{
CPaintDC dc(this); // device context for painting
OnPrepareDC(&dc);
OnDraw(&dc);
CRect rectClient;
GetClientRect(rectClient) ;
if (m_MemDC.GetSafeHdc() != NULL)
{ dc.BitBlt(0, 0, rectClient.Width(), m_BitmapHeight,
&m_MemDC, 0, 0, SRCCOPY) ;
}
}
m_BitmapHeight这个变量就是动态改变位图高度的一个变量