首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

OnPaint里的实现代码,在结束时,还会执行一次,请大神们帮忙给分析上

2012-10-26 
OnPaint里的实现代码,在结束时,还会执行一次,请大神们帮忙给分析下。if (byPowerOn1){dc.FillSolidRect(0

OnPaint里的实现代码,在结束时,还会执行一次,请大神们帮忙给分析下。
if (byPowerOn==1)
{
dc.FillSolidRect(0,0,m_screenX,m_screenY,RGB(0,0,0));
return;
}
if(update) update = 0;
dwTimeBetween = 5000;
switch (curStep)
{
case TAXIINFO:
dwTimeBetween = dwTextTime*1000;
if (DrvierInfo.Driver_Level==1)
{
ShowItem(&dc,pTaxiInfoMap1);
}
else if (DrvierInfo.Driver_Level==2)
{
ShowItem(&dc,pTaxiInfoMap2);
}
else if (DrvierInfo.Driver_Level==3)
{
ShowItem(&dc,pTaxiInfoMap3);
}
else if (DrvierInfo.Driver_Level==4)
{
ShowItem(&dc,pTaxiInfoMap4);
}
else if (DrvierInfo.Driver_Level==5)
{
ShowItem(&dc,pTaxiInfoMap5);
}
else
{
ShowItem(&dc,pTaxiInfoMap);
}
if(whileQuit) whileQuit = 0;
else curStep = 0xFF;
break;
case WELCOME:
ShowItem(&dc,pWelcomMap);
if(whileQuit)
{
whileQuit = 0;
}
else 
{
curStep++;
}
break;
case DRIVERINFO:

if (DrvierInfo.Driver_Level==1)
{
ShowItem(&dc,pTaxiInfoMap1);
}
else if (DrvierInfo.Driver_Level==2)
{
ShowItem(&dc,pTaxiInfoMap2);
}
else if (DrvierInfo.Driver_Level==3)
{
ShowItem(&dc,pTaxiInfoMap3);
}
else if (DrvierInfo.Driver_Level==4)
{
ShowItem(&dc,pTaxiInfoMap4);
}
else if (DrvierInfo.Driver_Level==5)
{
ShowItem(&dc,pTaxiInfoMap5);
}
else
{
ShowItem(&dc,pTaxiInfoMap);
}
if(whileQuit)
{
whileQuit = 0;
}
else 
{
curStep++;
}
break;
case NOSMOKE:
ShowItem(&dc,pNoSmokeMap);
if(whileQuit) 
{
whileQuit = 0;
}
else 
{
curStep++;
}

break;
case SEATBELT:
ShowItem(&dc,pSeatBeltMap);
if(whileQuit) 
{
whileQuit = 0;
}
else 
{
curStep++;
}
break;
case CARDINFO:
ShowItem(&dc,pCardInfoMap);
if(whileQuit) 
{
whileQuit = 0;
}
else
{
curStep++;
}
break;
case OILINFO:
ShowItem(&dc,pOilInfoMap);
if(whileQuit)
{
whileQuit = 0;
}
else
{
curStep++;
}
break;
case CALLTAXI:
ShowItem(&dc,pCallTaxiMap);
if(whileQuit) whileQuit = 0;
curStep = TEXTINFO;
break;
case TEXTINFO:
case TEXTTIMESHOW:
{
memset(textReadBuf,0,200);
textLen = 0;
textAllLen = 0;
if (curStep==TEXTINFO)
{
if(!mfile.Open(TEXT("\\ResidentFlash\\Img\\Text01"),CFile::modeRead))
{
curStep++;
break;
}
}
else
{
if(!mfile.Open(TEXT("\\ResidentFlash\\Img\\Text02"),CFile::modeRead))
{
curStep++;
break;
}
}
textAllLen = mfile.GetLength();
while(mfile.GetPosition()<textAllLen)
{
mfile.Read(textReadBuf,2);
textLen = (USHORT)(textReadBuf[0]<<8) + textReadBuf[1];
memset(textReadBuf,0,200);
mfile.Read(textReadBuf,textLen);
if(!GetSysTime(textReadBuf))
{
continue;
}
dwTimeBetween = (textReadBuf[18]*256+textReadBuf[19])*1000;
memset(TextInfoShow,0,200*sizeof(TCHAR));
Ansi2Unicode((BYTE*)textReadBuf+20,TextInfoShow,textLen-20);
ShowItem(&dc,pTextInfoMap);
if(whileQuit) 
{
break;
}
}
mfile.Close();
if(whileQuit) 
{
whileQuit = 0;
}
else 


{
curStep++;
}
break;
}
case TEXTTEMPSHOW:
memset(textReadBuf,0,200);
textLen = 0;
textAllLen = 0;
if(!mfile.Open(TEXT("\\ResidentFlash\\Img\\Text03"),CFile::modeRead))
{
bShowText = FALSE;
curStep = NOSMOKE;
break;
}
textAllLen = mfile.GetLength();
while(mfile.GetPosition()<textAllLen)
{
mfile.Read(textReadBuf,2);
textLen = (USHORT)(textReadBuf[0]<<8) + textReadBuf[1];
memset(textReadBuf,0,200);
mfile.Read(textReadBuf,textLen);
dwTimeBetween = (textReadBuf[18]*256+textReadBuf[19])*1000;
memset(TextInfoShow,0,200*sizeof(TCHAR));
Ansi2Unicode((BYTE*)textReadBuf+20,TextInfoShow,textLen-20);
ShowItem(&dc,pTextInfoMap);
if(whileQuit) 
{
break;
}
}
mfile.Close();
DeleteFile(TEXT("\\ResidentFlash\\Img\\Text03"));
bShowText = FALSE;
if(whileQuit) 
{
whileQuit = 0;
}
else
{
curStep = NOSMOKE;
}
break;
case BACKBOX:
dwTimeBetween = 7000;
ShowItem(&dc,pBackBoxMap);
if(whileQuit) 
{
whileQuit = 0;
}
else 
{
curStep++;
}
break;
case ASSESS:
dwTimeBetween = 20000;
ShowItem(&dc,pAssessMap);
if(whileQuit) 
{

whileQuit = 0;
byAssess = 0xFF;
break;
}
DealMsgPro("\x10\x02\x00\x01\x01\x06\x00\x01\x16\x17\x00\x02\x00\x00\x00\x04\x10\x03",18);
if(sendData((char*)sendMcuBuf,sendMcuLen))
{
if(sendData((char*)sendMcuBuf,sendMcuLen))
{
if(sendData((char*)sendMcuBuf,sendMcuLen))
return;
}
}
if(byAssess==0xFF)
{
curStep = 0xFF;
dc.FillSolidRect(0,0,m_screenX,m_screenY,RGB(0,0,255));
return;
}
else 
if (byAssess==DISSATISFIED)
{
curStep++;
}
else
{
curStep += 2;
}
byAssess = 0xFF;
break;
case ASSESS_DIS:
dwTimeBetween = 20000;
ShowItem(&dc,pAssessDisMap);
if(whileQuit)
{
whileQuit = 0;
}
else 
{
curStep++;
}
byDisSatisfy = 0xFF;
break;
case GOODBYE:
dwTimeBetween = 10000;
ShowItem(&dc,pGoodByeMap);
if(whileQuit) whileQuit = 0;
else curStep = 0xFF;
curStep = 0xff;
dc.FillSolidRect(0,0,m_screenX,m_screenY,RGB(255,0,0));
return;
default:
curStep = 0xFF;
dc.FillSolidRect(0,0,m_screenX,m_screenY,RGB(0,255,0));
return;
}
RedrawWindow(rtScreen,NULL,RDW_INTERNALPAINT);[/code]
这个执行完 GOODBYE 后,还会再进来一次,再次进来时候,curStep 他的值 有时候变成256,有时候会变成3,请帮忙分析

[解决办法]
完全的面向过程、最好的办法重构
[解决办法]

C/C++ code
请把代码粘贴在这里
[解决办法]
加判断,如果是结束时跳过绘图?
[解决办法]
探讨回赵老师, 加了一个窗口用来显示 Onpaint 里面的变化,发现在GOODBYE 执行完后,又产生了一次WM_PAINT消息,这个时候,curStep 的值就变成256 了,但是在我的整个程序中,除了Onpaint中会对curStep 的值加1以外,别的地方没有自加的代码。不明白 那地方修改了curStep 的值

[解决办法]
探讨回2楼 请问能具体说下,怎么复制吗,我把这里的都试了,还是没有找到你说的那种方式

热点排行