窗口重绘出现抖动,另外抖动一段时间后就挂掉了(窗口一片白的)是什么问题请高手指点!
解决方案 »
- VC界面问题: 如何让鼠标停在某个按钮上,鼠标旁边显示关于按钮说明的文本?
- WorkThread更新UI的问题
- [求教]多文档中串口读取问题
- 切分窗口中,如何改变分割条的颜色?该重载那个函数?怎样响应该函数??
- 我在一个子线程里面调用创建数据表的工作,老是说错误“连接占线导致另一个hstmt”
- 高手请进:如何截获某个操作是否调用了特定的widows的API函数?谢谢。急急急!
- 一个Socket问题
- 我想构造一个图像显示在CImageList中,可是显示的是一个白色图像,我该如何修改?
- 用ADO技术进行数据库编程是如何通过_RecordsetPtr得到当前记录行的行数?
- 有关于对象的停靠问题
- 怎么在一块黑色区域中,查找白像素点?
- 如何限制mfc对话框最大最小的值?
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CPen pen(PS_SOLID,1,RGB(255,255,255)); //创建新画笔
CPen* pOldPen = dc.SelectObject(&pen); //将画笔选入设备描述表,并将就画笔返回
dc.MoveTo(11,18); //画方框
dc.LineTo(970,18);
dc.MoveTo(11,17);
dc.LineTo(11,578);
dc.MoveTo(11,578);
dc.LineTo(970,578);
dc.MoveTo(970,578);
dc.LineTo(970,0);
//dc.SelectObject(pOldPen);
//delete pen;
//pen(PS_SOLID,1,RGB(255,255,255)); //创建新画笔
//CPen* pOldPen = dc.SelectObject(&pen); //将画笔选入设备描述表,并将就画笔返回
for(int i=1;i<20;i++)
{
dc.MoveTo(11,18+28*i);
dc.LineTo(970,18+28*i);
}
dc.SelectObject(pOldPen);
// Do not call CDialog::OnPaint() for painting messages
}
添出OnPaint
如果没问题,就是说你的串口接收事件OnOMM在飞快的被重复调用.
{
// TODO: Add your code to draw the specified item
ASSERT(lpDrawItemStruct != NULL);
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); //绘制操作所使用的设备环境
CRect rect = lpDrawItemStruct->rcItem; //指定了将被绘制的矩形区域
UINT state = lpDrawItemStruct->itemState;//指定了当前绘制操作完成后,所绘项的可见状态
UINT nStyle = GetStyle(); //The window’s style
int nRadius = m_nRadius;
//该函数通过把数据描述选定对象和图形模式(如位图、画笔、调色板、字体、笔、区域、绘图
//模式、映射模式)拷贝到描述表推栈中为保存,指定设备上下文环境的当前状态
//int nSavedDC = pDC->SaveDC();
pDC->SelectStockObject(NULL_BRUSH);
pDC->FillSolidRect(rect, RGB(138, 162, 157));
if ((state & ODS_FOCUS) && m_bDrawDashedFocusCircle) //第一个按钮
//画出一个圆
DrawCircle(pDC, m_ptCentre, nRadius--, RGB(0,0,0));
//Draw the raised/sunken edges of the button (unless flat)
if (nStyle & BS_FLAT) { //第二个按钮
DrawCircle(pDC, m_ptCentre, nRadius--, RGB(0,0,0));
DrawCircle(pDC, m_ptCentre, nRadius--, ::GetSysColor(COLOR_3DHIGHLIGHT));
} else {
if ((state & ODS_SELECTED)) {
DrawCircle(pDC, m_ptCentre, nRadius--,
::GetSysColor(COLOR_3DDKSHADOW), ::GetSysColor(COLOR_3DHIGHLIGHT));
DrawCircle(pDC, m_ptCentre, nRadius--,
::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DLIGHT));
for(int i=0;i<6;i++)
{
if(CColor=="0")
{
DrawCircle(pDC, m_ptCentre, i,
RGB(0, 190, 0),RGB(0, 190, 0)); //绿色
}
if(CColor=="1")
{
DrawCircle(pDC, m_ptCentre, i,
RGB(190, 1, 20),RGB(190,1, 20)); //红色
}
if(CColor=="2")
{
DrawCircle(pDC, m_ptCentre, i,
RGB(204, 204, 0),RGB(204, 204, 0)); //黄色
}
if(CColor=="3")
{
DrawCircle(pDC, m_ptCentre, i,
RGB(27, 58, 143),RGB(27,58, 143)); //蓝色
}
}
} else {
DrawCircle(pDC, m_ptCentre, nRadius--, RGB(0,0,0));
DrawCircle(pDC, m_ptCentre, nRadius--,
::GetSysColor(COLOR_3DHIGHLIGHT), ::GetSysColor(COLOR_3DDKSHADOW)); DrawCircle(pDC, m_ptCentre, nRadius--,
::GetSysColor(COLOR_3DLIGHT), ::GetSysColor(COLOR_3DSHADOW)); for(int i=0;i<6;i++)
{
if(CColor=="0")
{
DrawCircle(pDC, m_ptCentre, i,
RGB(0, 190, 0),RGB(0, 190, 0)); //绿色
}
if(CColor=="1")
{
DrawCircle(pDC, m_ptCentre, i,
RGB(192, 26, 42),RGB(192, 26, 42)); //红色
}
if(CColor=="2")
{
DrawCircle(pDC, m_ptCentre, i,
RGB(204, 204, 0),RGB(204,204, 0)); //黄色
}
if(CColor=="3")
{
DrawCircle(pDC, m_ptCentre, i,
RGB(27, 58, 143),RGB(27,58, 143)); //蓝色
}
}
}
}
// draw the text if there is any
CString strText;
//该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内
GetWindowText(strText);
//指出变量是否已经初始化
if (!strText.IsEmpty())
{
CRgn rgn;
//创建一个椭圆,该椭圆与X1,Y1和X2,Y2坐标点确定的矩形内切
rgn.CreateEllipticRgn(m_ptCentre.x-nRadius, m_ptCentre.y-nRadius,
m_ptCentre.x+nRadius, m_ptCentre.y+nRadius);
//该函数选择一个区域作为指定设备环境的当前剪切区域
pDC->SelectClipRgn(&rgn);
//使用该函数获得所选字体中指定字符串的高度和宽度
CSize Extent = pDC->GetTextExtent(strText);
//构造一个CPoint对象。如果不给参数,则不初始化x和y成员
CPoint pt = CPoint( m_ptCentre.x - Extent.cx/2, m_ptCentre.x - Extent.cy/2 ); if (state & ODS_SELECTED) pt.Offset(1,1); pDC->SetBkMode(TRANSPARENT); if (state & ODS_DISABLED)
//调用该成员函数来显示图象,并将视觉效果表示状态,例如无效或缺省状态
pDC->DrawState(pt, Extent, strText, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
else
pDC->SetTextColor(RGB (255, 255, 255));
//pDC->TextOut(pt.x, pt.y, strText);
//该函数选择一个区域作为指定设备环境的当前剪切区域
pDC->SelectClipRgn(NULL);
//该函数删除一个逻辑笔、画笔、字体、位图、区域或者调色板,释放所有与该对象
//有关的系统资源,在对象被删除之后,指定的句柄也就失效了
rgn.DeleteObject();
} // Draw the focus circle on the inside of the button
//if ((state & ODS_FOCUS) && m_bDrawDashedFocusCircle)
//可以画出一个圆
DrawCircle(pDC, m_ptCentre, nRadius,
RGB(0,0,0),RGB(0,0,0));
//该函数恢复设备上下文环境(DC)到指定状态,
//该设备上下文环境的恢复是通过使状态信息出栈而进行的
//pDC->RestoreDC(nSavedDC);
//pDC->DeleteDC();}请问这段程序那里内存泄露???