⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buzz_testdlg.cpp

📁 有关USB接口的HID主机应用软件开发通用例子,值得参考收藏@+@
💻 CPP
📖 第 1 页 / 共 3 页
字号:

						 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 + -