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

📄 videocommdlg.cpp

📁 这是G.723和G.729的音频编解码的源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	m_NameInConference.ResetContent();
	m_WantWatchOK.SetCheck(0);

	m_pWaveIn->End();
	m_pVideoCapture->EndCap();
	m_pInterfaceToBoard->End();
	m_pWaveOut->End();
	m_pDisplay->End();
	m_pFileTransmit->End();
	m_pDataComm->CloseConnection();

	EndWaitCursor();
	return;
}

void CVideoCommDlg::OnAddConference()
{
	OnBarBegin();

	// TODO: Add your control notification handler code here
	if(!m_bIsSendingCommand)
	{
		m_bHaveAnswer = FALSE;
		m_bIsSendingCommand = TRUE;
		m_nNowCommand = ID_ADDCONFERENCE;
		m_byCILength = 0;

		m_pbyCommandFrame[0] = TRequestAddConference;//1
		m_pbyCommandFrame[1] = m_TPortStatus.GetPortNameLength();//1
		CopyMemory(m_pbyCommandFrame+2, m_TPortStatus.GetPortName(), m_pbyCommandFrame[1]);
		m_byCILength = 2 + m_pbyCommandFrame[1];
		//Now send command
		SetTimer(REPEATSENDCOMMAND, RepeatSendCommandInternal, NULL);
		//CommandCallBack(m_pbyCommandFrame, m_byCILength, FS_VALID);//Send

		//After add to conference, enable this button
		m_PaletteBar.SetState(ID_ADDCONFERENCE, TBSTATE_CHECKED);
	}
	else
		MessageBox("现在有命令正在发送,并且没有受到应答,请稍候再试!");

	return;
}

void CVideoCommDlg::OnExitConference()
{
	// TODO: Add your control notification handler code here
	if(!m_bIsSendingCommand)
	{
		m_bHaveAnswer = FALSE;
		m_bIsSendingCommand = TRUE;
		m_nNowCommand = ID_EXITCONFERENCE;
		m_byCILength = 0;

		m_pbyCommandFrame[0] = TRequestExitConference;//1
		m_byCILength = 1;
		//Now send command
		SetTimer(REPEATSENDCOMMAND, RepeatSendCommandInternal, NULL);
		//CommandCallBack(m_pbyCommandFrame, m_byCILength, FS_VALID);//Send		
	}
	else
		MessageBox("现在有命令正在发送,并且没有受到应答,请稍候再试!");

	return;
}

void CVideoCommDlg::OnBroadcast()
{
	// TODO: Add your control notification handler code here
	if(!m_bIsSendingCommand)
	{
		m_bHaveAnswer = FALSE;
		m_bIsSendingCommand = TRUE;
		m_nNowCommand = ID_BROADCAST;

		m_byCILength = 0;
		m_pbyCommandFrame[0] = TRequestToken;//1
		m_byCILength = 1;
		//Now send command
		SetTimer(REPEATSENDCOMMAND, RepeatSendCommandInternal, NULL);
		//CommandCallBack(m_pbyCommandFrame, m_byCILength, FS_VALID);//Send	
		m_PaletteBar.SetState(ID_BROADCAST, TBSTATE_CHECKED);
	}
	else
		MessageBox("现在有命令正在发送,并且没有受到应答,请稍候再试!");

	return;
}

void CVideoCommDlg::OnStopBroadcast()
{
	// TODO: Add your control notification handler code here
	if(!m_bIsSendingCommand)
	{
		m_bHaveAnswer = FALSE;
		m_bIsSendingCommand = TRUE;
		m_nNowCommand = ID_STOPBROADCAST;
		m_byCILength = 0;
		m_pbyCommandFrame[0] = TRequestReleaseToken;//1
		m_byCILength = 1;
		//Now send command
		SetTimer(REPEATSENDCOMMAND, RepeatSendCommandInternal, NULL);
		//CommandCallBack(m_pbyCommandFrame, m_byCILength, FS_VALID);//Send		
		m_PaletteBar.SetState(ID_STOPBROADCAST, TBSTATE_CHECKED);
	}
	else
		MessageBox("现在有命令正在发送,并且没有受到应答,请稍候再试!");

	return;
}

void CVideoCommDlg::OnWatchOne()
{
	// TODO: Add your control notification handler code here
	if((!m_bIsSendingCommand)&&(m_TPortStatus.m_bOwnToken))
	{
		m_bHaveAnswer = FALSE;
		m_bIsSendingCommand = TRUE;
		m_nNowCommand = ID_WATCHONE;
		m_byCILength = 0;
		int nUserSel = 0;
		CString SelName;
		BYTE byPortNumber = 0;

		m_pbyCommandFrame[0] = TWantWatch;//1
		//想看的终端号, 所以终端必须能知道名称对应的端口号, 需要MCU传来
		nUserSel = m_NameInConference.GetCurSel();
		m_NameInConference.GetText(nUserSel, SelName);
		//根据名称查找对应的端口号
		for(int i=0; i<m_nTotalAddTerminalCount; i++)
		{
			if(NameNumber[i].Name == SelName)
			{
				byPortNumber = NameNumber[i].Number;
				break;
			}
		}
		m_pbyCommandFrame[1] = byPortNumber;//1
		m_byCILength = 2;
		//Now send command
		SetTimer(REPEATSENDCOMMAND, RepeatSendCommandInternal, NULL);
		//CommandCallBack(m_pbyCommandFrame, m_byCILength, FS_VALID);//Send		
		m_PaletteBar.SetState(ID_WATCHONE, TBSTATE_CHECKED);
	}
	else
		MessageBox("现在有命令正在发送,并且没有受到应答,请稍候再试!");

	return;
}

void CVideoCommDlg::OnStopWatchOne()
{
	// TODO: Add your control notification handler code here
	if(!m_bIsSendingCommand)
	{
		m_bHaveAnswer = FALSE;
		m_bIsSendingCommand = TRUE;
		m_nNowCommand = ID_STOPWATCHONE;
		m_byCILength = 0;

		m_pbyCommandFrame[0] = TStopWatch;//1
		m_byCILength = 1;
		//Now send command
		SetTimer(REPEATSENDCOMMAND, RepeatSendCommandInternal, NULL);
		//CommandCallBack(m_pbyCommandFrame, m_byCILength, FS_VALID);//Send				
		m_PaletteBar.SetState(ID_STOPWATCHONE, TBSTATE_CHECKED);
	}
	else
		MessageBox("现在有命令正在发送,并且没有受到应答,请稍候再试!");

	return;
}

void CVideoCommDlg::OnData()
{
	//m_pDataComm->OpenComm(2, this);
	m_nNowCommand = ID_DATA;
	static int nState = 0;
    char strWhite[] ="电子部三十所  " ;
	char strChildWhite[]="电子白板";

 	HWND ghWhite,ghChildWhite,ghChildWhite1;

	if(nState)//Checked
	{
		nState = 0;
		m_pDataComm->CloseConnection();
		//Find data service's windows and postmessage wm_close, see 863's terminal
		//KillTimer(READDATAFROMSERIAL);

        m_pVideoCapture->DisableVisible(0);
		m_PaletteBar.SetState(ID_DATA, TBSTATE_ENABLED);
	}
	else
	{		
		nState = 1;//Checked
		InitComm(2);//Initilize the serial port
		//start read data from serila using timer
		//SetTimer(READDATAFROMSERIAL, ReadDataFromSerialInternal, NULL);
		m_PaletteBar.SetState(ID_DATA, TBSTATE_CHECKED|TBSTATE_ENABLED);		

		PROCESS_INFORMATION piProcInfo; 
		STARTUPINFO siStartInfo; 
 
		// Set up members of STARTUPINFO structure. 
 
		ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
		siStartInfo.cb = sizeof(STARTUPINFO);
   
	    if(::CreateProcess(NULL, "E:\\WHITE\\VMWIN.EXE", NULL, NULL, TRUE, 
			0, NULL, NULL, &siStartInfo, &piProcInfo))
		{
			Sleep(200);

			ghWhite =::FindWindow(NULL,strWhite);								

			ghChildWhite=::GetWindow(ghWhite,GW_CHILD);

			ghChildWhite1=::GetWindow(ghChildWhite,GW_CHILD);

			//ghChildWhite2=::GetWindow(ghChildWhite1,GW_CHILD);
			::MoveWindow(ghWhite,5,100,370,400,TRUE);

			::PostMessage(ghChildWhite,WM_MDIMAXIMIZE,(WPARAM)ghChildWhite1,0L); 		
          	
			

		}
		
	}
}

int CVideoCommDlg::InitComm(int nPort)
{
	m_pDataComm->OpenComm(nPort, this);

	return 0;
}

int CVideoCommDlg::StrToByte(CString str, BYTE *byCon, int nLength)
{
	for(int i=0; i<nLength; i++)
			byCon[i] =  (BYTE)str[i];
	return 0;
}

int CVideoCommDlg::ByteToStr(BYTE *pFrame, char *Msg, int nLength)
{
	for(int i=0; i<nLength; i++)
		Msg[i] = (char)pFrame[i];
	return 0;
}

BOOL CVideoCommDlg::GetUserSetting()
{
	//Open the data of saved before
	HKEY hKey = NULL;
	DWORD dwDisposition = 0;

	long re0 = ::RegCreateKeyEx(HKEY_CURRENT_USER, data_Set, NULL,
		NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, 
		&hKey, &dwDisposition);
	if(re0 != ERROR_SUCCESS)//Open or create fail
		MessageBox("无法打开注册表!请输入参数。");
	else
	{
		//Query data about Port rate, video quant and this teminal's name
		BYTE byPortRate = 1;
		BYTE byVideoQuant = 4;
		BYTE byVideoCRC = 0;
		BYTE bySoftAudio = 1;
		DWORD dwLength = 1;
		DWORD dwType_1 = REG_DWORD;
		DWORD dwType_2 = REG_SZ;
		BYTE cUserName[MAXNAMELENGTH];
		BYTE byNameLength = 0;

		long re1 = ::RegQueryValueEx(hKey, "PortRate", NULL, &dwType_1, &byPortRate, &dwLength);
		re1 = ::RegQueryValueEx(hKey, "PortRate", NULL, &dwType_1, &byPortRate, &dwLength);
		long re2 = ::RegQueryValueEx(hKey, "VideoQuant", NULL, &dwType_1, &byVideoQuant, &dwLength);
		long re3 = ::RegQueryValueEx(hKey, "VideoCRC", NULL, &dwType_1, &byVideoCRC, &dwLength);
		long re4 = ::RegQueryValueEx(hKey, "SoftAudio", NULL, &dwType_1, &bySoftAudio, &dwLength);
		dwLength = MAXNAMELENGTH;
		long re5 = ::RegQueryValueEx(hKey, "Name", NULL, &dwType_2, cUserName, &dwLength);
		byNameLength = (BYTE)dwLength-1;//Get rid of the last '\0'
		if(re1 != ERROR_SUCCESS || re2 != ERROR_SUCCESS || re3 != ERROR_SUCCESS ||
		   re4 != ERROR_SUCCESS || re5 != ERROR_SUCCESS)
		{
			LPVOID lpMsgBuf;
			FormatMessage( 
				FORMAT_MESSAGE_ALLOCATE_BUFFER | 
				FORMAT_MESSAGE_FROM_SYSTEM | 
				FORMAT_MESSAGE_IGNORE_INSERTS,
				NULL,
				GetLastError(),
				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
				(LPTSTR) &lpMsgBuf,
				0,
				NULL 
			);
			// Process any inserts in lpMsgBuf.
			// ...
			// Display the string.
			MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
			// Free the buffer.
			LocalFree( lpMsgBuf );
 			MessageBox("错误:无法读取注册表!请重新输入参数。");
		}
		m_nPortRate=byPortRate;
		m_nQuant=byVideoQuant;
		m_bVideoCRC = byVideoCRC;
		m_bSoftAudio = bySoftAudio;
		m_MyName=CString(cUserName);
		::RegCloseKey(hKey);

		//Save the name to port status
		char thename[MAXNAMELENGTH];

		for(int j=0; j<byNameLength; j++)
			thename[j] = (char)cUserName[j];
		m_TPortStatus.SetPortName(thename, byNameLength);	
	}	
	return TRUE;
}

void CVideoCommDlg::OnAdvanced() 
{
	// TODO: Add your control notification handler code here
	CConfigDlg ConfigDlg;

	ConfigDlg.DoModal();	
}

void CVideoCommDlg::OnFileTransmit() 
{
	// TODO: Add your control notification handler code here
	const int nLength = 9;
	const char cButtonTextBegin[] = "文件传输";
	const char cButtonTextStop[] = "停止传输";
	char cBuffer[20];

	//m_hFinishFileTransmit = ::CreateEvent(NULL, TRUE, FALSE, "IsFinishFileTransmit");
	GetDlgItemText(IDC_FILETRANSMIT, cBuffer, 20);
	if(::strncmp(cBuffer, cButtonTextStop, nLength) == 0)//is 'Stop send', then so stop it
	{
		SetDlgItemText(IDC_FILETRANSMIT, cButtonTextBegin);
		m_pFileTransmit->End();
		m_byAction = MEDONOTHINGABOUTFILE;
		return;
	}

	m_byAction = MESENDFILE;
	SetDlgItemText(IDC_FILETRANSMIT, cButtonTextStop);
	m_pFileTransmit->StartSendFileThread();	
}

void CVideoCommDlg::FileDataToChannel(BYTE *pContent, UINT nLength)
{
	if(m_pFileSendChannel)
		m_pFileSendChannel->SendData(pContent, nLength);
}

void CVideoCommDlg::ChannelToFileData(BYTE *pFrame, int nLength)
{
	//static BYTE byAction = MEDONOTHINGABOUTFILE;
	static BYTE byStartReceive = 0;//0--not start, 1---have start, 2--have start and exit
	static DWORD dwResult = 0;

	ASSERT(m_pFileTransmit != NULL);
	//m_byAction = m_pFileTransmit->MeAction();
	//now we design this file transmition is point to point, so only the terminal
	//that is wathced by broadcasting terminal can receive file data
	if(m_bIsMulticast)
	{
		if(m_byAction == MESENDFILE)
		{
			m_pFileTransmit->ReceiveDataFromChannel(pFrame, nLength);
		}
		else
		{
			if(m_bIsWatched)
			{
				switch(byStartReceive)
				{
				case 2://have started and now have exited
					if(::memcmp(pFrame, pZRQINITFrame, ZRQINITFrameLength) == 0)//Now a new file transmit receive
						byStartReceive = 0;//So we start receive again
					else
						return;
					break;
				case 1://have start receive
					dwResult = m_pFileTransmit->GetReceiveFileThreadExitCode();
					if(dwResult != STILL_ACTIVE)
					{
						byStartReceive = 2;//have started and now have exited
						return;
					}
					break;
				case 0://Not start
					byStartReceive = 1;
					m_pFileTransmit->StartReceiveFileThread();
					break;
				}
				m_pFileTransmit->ReceiveDataFromChannel(pFrame, nLength);
			}//end of m_bIsWatched
		}//end of m_byAction != MESENDFILE
	}//end of m_bIsMulticast
	else
	{
		if(m_byAction == MESENDFILE)
		{
			m_pFileTransmit->ReceiveDataFromChannel(pFrame, nLength);
		}
		else
		{
			switch(byStartReceive)
			{
			case 2://have started and now have exited
				if(::memcmp(pFrame, pZRQINITFrame, ZRQINITFrameLength) == 0)//Now a new file transmit receive
					byStartReceive = 0;//So we start receive again
				else
					return;
				break;
			case 1://have start receive
				dwResult = m_pFileTransmit->GetReceiveFileThreadExitCode();
				if(dwResult != STILL_ACTIVE)
				{
					byStartReceive = 2;//have started and now have exited
					return;
				}
				break;
			case 0://Not start
				byStartReceive = 1;
				m_pFileTransmit->StartReceiveFileThread();
				break;
			}
			m_pFileTransmit->ReceiveDataFromChannel(pFrame, nLength);
		}//end of m_byAction != MESENDFILE
	}//end of !m_bIsMultcast

	 /*
	//now we design this file transmition is point to point, so only the terminal
	//that is wathced by broadcasting terminal can receive file data
	if(m_bIsMulticast)
	{
		if((byAction != MESENDFILE) && m_bIsWatched)//if not me send file and not watched
		{
			goto CONTINUE;
		}
		else
		{
			::AfxMessageBox("Skip file data!");
			return;
		}
	}
CONTINUE:ASSERT(m_pFileTransmit != NULL);
	if(byStartReceive == 2 && byAction != MESENDFILE)//have started and now have exited
	{
		if(::memcmp(pFrame, pZRQINITFrame, ZRQINITFrameLength) == 0)//Now a new file transmit receive
			byStartReceive = 0;//So we start receive again
		else
			return;
	}

	if(byStartReceive == 1 && byAction != MESENDFILE)//have start receive
	{
		dwResult = m_pFileTransmit->GetReceiveFileThreadExitCode();
		if(dwResult != STILL_ACTIVE)
		{
			byStartReceive = 2;//have started and now have exited
			return;
		}
	}

	if(byStartReceive == 0 && byAction != MESENDFILE)//Not start
	{
		byStartReceive = 1;
		byAction = m_pFileTransmit->MeAction();
		if(byAction != MESENDFILE)
		{
			m_pFileTransmit->StartReceiveFileThread();
		}
	}
	m_pFileTransmit->ReceiveDataFromChannel(pFrame, nLength);*/
}

void CVideoCommDlg::DisplayInfo(LPCTSTR lpsStr, BOOL bAlert)
{
	//clear before content, maybe have other good method
	::MessageBeep(MB_OK);
	m_DisplayInfo.SetWindowText("   ");
	m_DisplayInfo.SetWindowText(lpsStr);
}

void DisplayInfo1(LPCTSTR lpsStr, BOOL bAlert)
{
	CVideoCommDlg VideoCommDlg;

	VideoCommDlg.DisplayInfo(lpsStr, bAlert);
}

void CVideoCommDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	
}

void CVideoCommDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
     
	CDialog::OnLButtonDown(nFlags, point);
}

void CVideoCommDlg::OnCancelMode() 
{
	CDialog::OnCancelMode();
	
	// TODO: Add your message handler code here
	
}

void CVideoCommDlg::OnCaptureChanged(CWnd *pWnd) 
{
	// TODO: Add your message handler code here
	
	CDialog::OnCaptureChanged(pWnd);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -