📄 buzz_testdlg.cpp
字号:
if(k==16&&firstNum7==0)
{
firstNum7 = 1;
strFirst7.Format("%d",firstNum7);
SetWindowText(hWndFile7,strFirst7);
}
else if(k==16&&Dlg->Button[k].Passed == Pressed)
{
//k++;
//AfxMessageBox("start");
firstNum7++;
strFirst7.Format("%d",firstNum7);
SetWindowText(hWndFile7,strFirst7);
Dlg->Button[k].Passed = NeverPressed;
}
}
}
//////////////////////////<-------
for( i=0; (i<20) && (mutibutton < 2) ;i++) //设置相应的按钮标志
{
if(TempBuzzReceiveData & 0x01)
{Dlg->Button[i].Passed = Pressing;}
else if(Dlg->Button[i].Passed == Pressing)
{
Dlg->Button[i].Passed = Pressed;//AfxMessageBox("3");
}
TempBuzzReceiveData>>=1;
if(Dlg->Button[i].Passed == 1)
{Resulttemp++;}
}
Dlg->Led[0].Passed = Dlg->Led[1].Passed = Dlg->Led[2].Passed = Dlg->Led[3].Passed = 1;
BuzzSendData[2] = BuzzSendData[3] = BuzzSendData[4] = BuzzSendData[5] = 0xff;
for( i=0; i<4; i++)
for(int j=0; j<5; j++)
{
int temp = 0;
if( BuzzReceiveData & (0x01 << (i*5+j)) )
;
else if(Dlg->Button[i*5+j].Passed == Pressing)
temp = Pressed;
if( (Dlg->Button[i*5+j].Passed != Pressed) && temp != Pressed)
{
Dlg->Led[i].Passed = 0;
BuzzSendData[i+2] = 0;
}
}
for( i=0; i<20; i++)
{
if( BuzzReceiveData & (0x01 << i) )
{
Dlg->Led[i/5].Passed = 0;
BuzzSendData[i/5+2] = 0;
}
}
Dlg->Buzz.SendData(BuzzSendData);
if(Resulttemp == 24) //测试完毕
{
ButtonResult = 1;
// Dlg->BuzzReceiveRun = 0;
Dlg->Prompt = _T("测试完成 ");
// Dlg->Prompt = _T("Test Finished. ");
(CButton* )Dlg->GetDlgItem(IDC_RETEST)->EnableWindow(1);
Dlg->InvalidateRect(CRect(80,470,580,510));
}
else
ButtonResult = 0;
if( OldReceiveData != BuzzReceiveData )
{
OldReceiveData = BuzzReceiveData;
Dlg->Invalidate(0);
}
}
else if( Dlg->iTestMode == AllLedMode )
{
//AfxMessageBox("oeek");
//if( BuzzSendData[2] && BuzzSendData[3] && BuzzSendData[4] && BuzzSendData[5] )
//{
if( (BReceiveData[3] == 0x01))
{
//AfxMessageBox("oeek");
UCHAR tem[10];
memcpy(tem,BuzzSendData,8);
tem[2] = 0;
Dlg->Buzz.SendData(tem); //BuzzSendData
}
else if( (BReceiveData[3] == 0x20))
{
// AfxMessageBox("oeek");
UCHAR tem[10];
memcpy(tem,BuzzSendData,8);
tem[3] = 0;
Dlg->Buzz.SendData(tem); //BuzzSendData
}
else if( (BReceiveData[4] == 0x04))
{
//AfxMessageBox("oeek");
UCHAR tem[10];
memcpy(tem,BuzzSendData,8);
tem[4] = 0;
Dlg->Buzz.SendData(tem); //BuzzSendData
}
else if( (BReceiveData[4] == 0x80))
{
//AfxMessageBox("ok");
UCHAR tem[10];
memcpy(tem,BuzzSendData,8);
tem[5] = 0;
Dlg->Buzz.SendData(tem); //BuzzSendData
}
for(int i=0; i<4; i++)
{
//AfxMessageBox("oe44ek");
if(BuzzReceiveData & (0x01<<(i*5)))
{
Dlg->Button[i*5].Passed = Pressing;
temp |= (0x01<<i); // temp = 0x0f ,begin single led test
}
else if(Dlg->Button[i*5].Passed == Pressing)
{
Dlg->Button[i*5].Passed = Pressed;
if( i==0)
{
UCHAR tem[10];
memcpy(tem,BuzzSendData,8);
if(Dlg->Led[i].Passed)
tem[2] = 0xff;
Dlg->Buzz.SendData(tem); //BuzzSendData
}
else if( i==1)
{
UCHAR tem[10];
memcpy(tem,BuzzSendData,8);
if(Dlg->Led[i].Passed)
tem[3] = 0xff;
Dlg->Buzz.SendData(tem); //BuzzSendData
}
else if( i==2)
{
UCHAR tem[10];
memcpy(tem,BuzzSendData,8);
if(Dlg->Led[i].Passed)
tem[4] = 0xff;
Dlg->Buzz.SendData(tem); //BuzzSendData
}
else if( i==3)
{
UCHAR tem[10];
memcpy(tem,BuzzSendData,8);
if(Dlg->Led[i].Passed)
tem[5] = 0xff;
Dlg->Buzz.SendData(tem); //BuzzSendData
}
}
}
if(temp == 0x0f)
(CButton* )Dlg->GetDlgItem(IDC_TEST_LED)->EnableWindow(1);
if(OldReceiveData != (BuzzReceiveData & 0x8421))
{
OldReceiveData = BuzzReceiveData;// new add to avoid the 20led to light
for(int i=0; i<4; i++) //
if(Dlg->Led[i].Passed) //
Dlg->InvalidateRect(CRect(Dlg->Button[0].Pos.TopLeft() ,Dlg->Button[15].Pos.BottomRight()), 0);
}
//}
}
// }
/* else
{
DWORD dError=GetLastError();
if( dError != ERROR_SUCCESS && dError != ERROR_IO_PENDING)
{
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL );
// Dlg->DisConnect();
TRACE(_T((LPCTSTR)lpMsgBuf));
Dlg->BuzzReceiveRun = 0;
return dResult ;
}
}*/
}
// Dlg->DisConnect();
Dlg->BuzzReceiveRun = 0;
return 0;
}
//===========================================================
// 功能说明: 开始测试按钮。
// 函数原形: OnRetest()
// 输入参数: 无
// 输出参数: 无
// 备 注:
//===========================================================
void CBuzz_TestDlg::OnRetest()
{
// TODO: Add your control notification handler code here
if(bConnect == 1 )
{
KillTimer(1);
if(BuzzReceiveRun)
{
BuzzReceiveRun = 0;
WaitForSingleObject(BuzzReceiveThred->m_hThread,INFINITE);
}
// DisConnect();
// Connect();
ResetButton();
ResetBCDEButton();
OnAllLed() ;
Led[0].Passed = Led[1].Passed = Led[2].Passed = Led[3].Passed = 1;
BuzzSendData[2] = BuzzSendData[3] = BuzzSendData[4] = BuzzSendData[5] = 0xff;
Buzz.SendData(BuzzSendData);
Invalidate(1);
}
else
Connect();
}
//===========================================================
// 功能说明: 显示按钮。
// 函数原形: DrawButton(CPaintDC* pdc)
// 输入参数: pdc
// 输出参数: 无
// 备 注:
//===========================================================
void CBuzz_TestDlg::DrawButton(CPaintDC* pdc)
{
CBrush RedBrush(Red);
CBrush BlackBrush(Black);
CBrush WhiteBrush(White);
CBrush BrownBrush(Brown);
CBrush PerBrush(RGB(188,0,188));
CBrush* OldBrush=pdc->SelectObject (&BlackBrush);
for(int i=0;i<4;i++)
{
if( BCDEButton[i].Passed == NeverPressed) // the big rect which contail four small rect
{
CBrush* OldBrush1=(CBrush*) pdc->SelectStockObject(NULL_BRUSH);
pdc->Rectangle(BCDEButton[i].Pos);
pdc->SelectObject (OldBrush1);
}
else if( BCDEButton[i].Passed == Pressed)
pdc->FillRect(&(BCDEButton[i].Pos), &BrownBrush );
else if( BCDEButton[i].Passed == Pressing)
pdc->FillRect(&(BCDEButton[i].Pos), &PerBrush);
}
for( i=0;i<20;i++)
{
if( Button[i].Shape == Circle && Button[i].Passed == NeverPressed) // only big circle
{
pdc->SelectObject (&BlackBrush);
pdc->Ellipse(&(Button[i].Pos));
}
else if( Button[i].Shape == Circle && Button[i].Passed == Pressed)
{
pdc->SelectObject (&RedBrush);
pdc->Ellipse(&(Button[i].Pos));
}
else if( Button[i].Shape == Circle && Button[i].Passed == Pressing)
{
pdc->SelectObject (&WhiteBrush);
pdc->Ellipse(&(Button[i].Pos));
}
if( Button[i].Shape == Rect && Button[i].Passed == NeverPressed) // only rect button
pdc->FillRect(&(Button[i].Pos), &BlackBrush);
else if( Button[i].Shape == Rect && Button[i].Passed == Pressed)
pdc->FillRect(&(Button[i].Pos), &CBrush(Button[i].Color ));
else if( Button[i].Shape == Rect && Button[i].Passed == Pressing)
pdc->FillRect(&(Button[i].Pos), &WhiteBrush);
}
for(i=0;i<4;i++)
{
if(Led[i].Passed ) // Select the color to draw
pdc->SelectObject (&RedBrush);
else
pdc->SelectObject (&BlackBrush); //
pdc->Ellipse(&(Led[i].Pos));
}
pdc->SetBkMode(TRANSPARENT);
CString buttonname;
COLORREF buttonnamecolor = RGB(128,128,128);
COLORREF oldtextcolor = pdc->SetTextColor(buttonnamecolor);
int OldTextMode = pdc->SetTextAlign(TA_CENTER);
CString buttonabcde[5] = {"A","E","D","C","B"};
for( i = 0 ; i < 4 ; i++ )
for( int j = 0 ; j < 5 ; j++ )
{
buttonname.Format("%d" + buttonabcde[j], i + 1);
pdc->TextOut (Button[i*5+j].Pos.CenterPoint().x + 1,Button[i*5+j].Pos.CenterPoint().y-6, buttonname);
}
pdc->SetTextAlign(OldTextMode);
pdc->SetTextColor (oldtextcolor);
pdc->SelectObject (OldBrush);
BlackBrush.DeleteObject();
RedBrush.DeleteObject();
WhiteBrush.DeleteObject();
}
//===========================================================
// 功能说明: 按钮及LED的颜色、形状、位置初始化。
// 函数原形: SetButton()
// 输入参数: 无
// 输出参数: 无
// 备 注:
//===========================================================
void CBuzz_TestDlg::SetButton()//设定灯和按钮的颜色和位置信息.
{ //
int Shape[5] = {Circle, Rect, Rect, Rect, Rect};
COLORREF ButtonColor[5] = {Red, Yellow, Green, Orange, Blue};
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
Button[i*5+j].Shape = Shape[j];
Button[i*5+j].Color = ButtonColor[j];
if(j == 0)
Button[i*5+j].Pos = CRect(Center.cx - Buzz_Button_Dia, Center.cy - Buzz_Button_Dia + i*Row_Dis,
Center.cx + Buzz_Button_Dia, Center.cy + Buzz_Button_Dia + i*Row_Dis);
else
Button[i*5+j].Pos = CRect(Center.cx + Buzz_Button_Dia -25 + (5-j)*Col_Dis, Center.cy + i*Row_Dis - AnswerHeight/2,
Center.cx + Buzz_Button_Dia -25 + (5-j)*Col_Dis + AnswerWidth, Center.cy + i*Row_Dis + AnswerHeight/2);
}
Led[i].Shape = Circle;
Led[i].Color = Red;
Led[i].Pos = CRect(Center.cx + Buzz_Button_Dia +25 + 4*Col_Dis -Led_Dia + AnswerWidth/2, Center.cy + i*Row_Dis - Led_Dia,
Center.cx + Buzz_Button_Dia +25 + 4*Col_Dis + Led_Dia + AnswerWidth/2, Center.cy + i*Row_Dis + Led_Dia);
BCDEButton[i].Shape = Rect;
BCDEButton[i].Pos = CRect(Center.cx + Buzz_Button_Dia + 15, Center.cy + i*Row_Dis - AnswerHeight/2 - 5,
Center.cx + Buzz_Button_Dia + 15 + 4*Col_Dis, Center.cy + i*Row_Dis + AnswerHeight/2+ 5);
}
}
//===========================================================
// 功能说明: 按钮状态重置。
// 函数原形: ResetButton
// 输入参数: 无
// 输出参数: 无
// 备 注:
//===========================================================
void CBuzz_TestDlg::ResetButton()
{
for(int i=0;i<20;i++)
Button[i].Passed = 0;
ButtonResult = 0;
Invalidate(1);
}
//===========================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -