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

📄 main.cpp

📁 NetTalk是一个适用于局域网和因特网的可视电话软件 一.开发环境 Windows2000 Server & Visual C++6.0 & SDK +自开发的CWndX类库(相当于简化的MF
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			}
			else
				AVIO.Refuse();
		}break;
		//the request is accepted,so begin to talk
	case IOMN_ACCEPT:
		{
			SendMessage(m_CallDlg,WM_COMMAND,IDC_OK,0);
			ShowWindow(m_LocalVideoWnd,SW_SHOWNORMAL);
			ShowWindow(m_hWnd,SW_SHOWNORMAL);
			AVIO.OnAccept();			
			
			m_uTalkTime=0;
			m_nTimePass=GetTickCount();
			m_nDataRcv=0;
			m_nDataSend=0;
			m_nFrameCount=0;
			m_iZeroCount=0;
			SetTimer(m_hWnd,2,1000,0);
			//write the talking event into log file
			sockaddr_in sc=AVIO.GetRemoteAddr();
			char sz[50];
			sprintf(sz,"%d.%d.%d.%d",
				sc.sin_addr.S_un.S_un_b.s_b1,
				sc.sin_addr.S_un.S_un_b.s_b2,
				sc.sin_addr.S_un.S_un_b.s_b3,
				sc.sin_addr.S_un.S_un_b.s_b4);
			char szPath[256];
			GetModuleFileName(0,szPath,255);
			int i;
			for(i=strlen(szPath);i>0;i--)
			{
				if(szPath[i]=='\\')
				{
					szPath[i+1]=0;
					break;
				}
			}
			
			strcpy(szPath+strlen(szPath),"log.txt");
			SYSTEMTIME st;
			GetLocalTime(&st);
			char szDate[20];
			char szTime[20];
			sprintf(szDate,"%d-%d-%d",st.wYear,st.wMonth,st.wDay);
			sprintf(szTime,"%d:%d:%d",st.wHour,st.wMinute,st.wSecond);
			char szLog[100];
			sprintf(szLog,"%s接受了你的通话请求",sz);
			WritePrivateProfileString(szDate,szTime,szLog,szPath);
		}
		break;
	case IOMN_CONNECTED:
		{
			if(IsWindow(m_CallDlg))
			{
				m_CallDlg.Connected();
			}
		}
		break;

	case IOMN_END:
		{
			AVIO.EndTalk();
			KillTimer(m_hWnd,2);
			DrawFps("");
			DrawDataRate("");
			ShowWindow(m_vs,SW_HIDE);
			ShowWindow(m_LocalVideoWnd.m_vs,SW_HIDE);
			ShowWindow(m_RemoteVideoWnd.m_vs,SW_HIDE);
			if(IsWindow(m_RingDlg))
				EndDialog(m_RingDlg,FALSE);
			else
			{
				if(HIWORD(wParam)==E_USER)
				{
					CMsgBox::MessageBox(m_hWnd,IDS_MSG_ENDTALK,IDS_MSG,MB_OK,IDI_INFO);
					
				}
			}
			
		}
		break;
	case IOMN_REFUSE:
		{
			switch(HIWORD(wParam))
			{
			case R_TIMEOUT:
				{					
					m_CallDlg.FailConnect();
				}
				break;
			case R_USER:
				{
					m_CallDlg.Refuse();
				}				
				break;
			case R_BUSY:
				{
					m_CallDlg.Busy();
				}
				break;
			}
			
		}
		break;
		//the error of aviomgr
	case IOMN_ERR:
		{
			switch(HIWORD(wParam))
			{
			case IOME_SOCKET:
				CMsgBox::MessageBox(m_hWnd,IDS_ERR_NET_SOCKET,IDS_ERR,MB_OK,IDI_ERR);
				break;
			case IOME_AUDIO_IN:
				CMsgBox::MessageBox(m_hWnd,IDS_ERR_AUDIO_IN,IDS_ERR,MB_OK,IDI_ERR);
				break;
			case IOME_AUDIO_OUT:
				CMsgBox::MessageBox(m_hWnd,IDS_ERR_AUDIO_OUT,IDS_ERR,MB_OK,IDI_ERR);
				break;
			case IOME_VIDEO_IN:
				m_LocalVideoWnd.SetErrTxt("无法打开视频输入设备");
				break;
			case IOME_VIDEO_OUT:
				//always good
				break;
			case IOME_AUDIO_CODEC:
				CMsgBox::MessageBox(m_hWnd,IDS_ERR_AUDIO_CODEC,IDS_ERR,MB_OK,IDI_ERR);
				break;
			case IOME_VIDEO_CODEC:
				CMsgBox::MessageBox(m_hWnd,IDS_ERR_VIDEO_CODEC,IDS_ERR,MB_OK,IDI_ERR);
				break;
			}
		}break;
		//Txt msg come,or notify that the txt msg has been confermed received
	case IOMN_TXT:
		{
			if(HIWORD(wParam))
			{
				char sz[500];
				sprintf(sz,"%s:%s","我",(char*)lParam);
				m_MsgTalk.AddMsg(sz);
			}
			else
			{
				sockaddr_in sc=AVIO.GetCurrentAddr();
				char sz[500];
				sprintf(sz,"%d.%d.%d.%d:%s",
					sc.sin_addr.S_un.S_un_b.s_b1,
					sc.sin_addr.S_un.S_un_b.s_b2,
					sc.sin_addr.S_un.S_un_b.s_b3,
					sc.sin_addr.S_un.S_un_b.s_b4,(char*)lParam);
				m_MsgTalk.AddMsg(sz);
				if(CSetupDlg::Setup.bAutoMsg)
				{
					ShowWindow(m_MsgTalk,SW_SHOW);
					SetForegroundWindow(m_MsgTalk);
					SetActiveWindow(m_MsgTalk);
				}
			}
		}break;
		//the video quality was set by aviomgr automatically
	case IOMN_VQSET:
		{
			m_sldVideoQ.SetPos(HIWORD(wParam));

		}break;
	}
}
/*------------------------------------------------------------------------------*/
//when the output volume was changed,this would be invoked
void CALLBACK CMainWnd::OutVolumeChanged( DWORD dwCurrentVolume, DWORD dwUserValue )
{
	CMainWnd* p=(CMainWnd*)dwUserValue;
	p->m_sldAudioOut.SetPos(dwCurrentVolume*100/
		(p->m_VoOutCtrl.GetMaximalVolume()-p->m_VoOutCtrl.GetMinimalVolume()));
	
}
/*------------------------------------------------------------------------------*/
void CALLBACK CMainWnd::InVolumeChanged( DWORD dwCurrentVolume, DWORD dwUserValue )
{
	CMainWnd* p=(CMainWnd*)dwUserValue;
	p->m_sldAudioIn.SetPos(dwCurrentVolume*100/
		(p->m_VoInCtrl.GetMaximalVolume()-p->m_VoInCtrl.GetMinimalVolume()));

}
/*------------------------------------------------------------------------------*/
//when the setup was changed,this would be call
void CMainWnd::OnSetup(SETUP *Setup)
{
	char sz[20];
	sz[1]=0;
	//autorun
	if(Setup->bAutoRun)
	{
		sz[0]='1';
		HKEY  hKey=NULL;
		DWORD dwValueType=REG_SZ;
		DWORD dwStrCb=128;
		DWORD  dwDisposition;
		char szPath[256];
		GetModuleFileName(0,szPath,255);
		if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),0,KEY_QUERY_VALUE|KEY_SET_VALUE,&hKey)!=ERROR_SUCCESS)
		{	
			RegCreateKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, 
				NULL, &hKey, &dwDisposition);
			
		}
		if (RegSetValueEx(hKey,"NetTalk",0,REG_SZ,(const BYTE*)szPath,dwStrCb)!=ERROR_SUCCESS) 
		{
			RegCloseKey(hKey);
			
		}
	}
	else
	{
		sz[0]='0';
		HKEY  hKey=NULL;
		if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),0,KEY_QUERY_VALUE|KEY_SET_VALUE,&hKey)==ERROR_SUCCESS)
		{
			RegDeleteValue(hKey,"NetTalk");
		}

	}
	//
	AVIO.EnableBandAdjust(Setup->bBandAdjust);
	//
	AVIO.Enable(!Setup->bRefuseCall);	
	//when refuse call,the avio was disable,change the notify-try icon
	if(Setup->bRefuseCall)
	{
		m_TrayNotify.SetIcon(LoadIcon(hInstX,LPCTSTR(IDI_DISABLE)));
		m_TrayNotify.Refresh();
	}
	else
	{
		m_TrayNotify.SetIcon(LoadIcon(hInstX,LPCTSTR(IDI_MAIN)));
		m_TrayNotify.Refresh();
	}
	//unregister the old hotkey,and register the new hotkey
	UnregisterHotKey(m_hWnd,1);
	UINT Mod=0;
	if(HOTKEYF_ALT&HIBYTE(Setup->wHotKey))
		Mod|=MOD_ALT;
	if(HOTKEYF_CONTROL&HIBYTE(Setup->wHotKey))
		Mod|=MOD_CONTROL;
	if(HOTKEYF_SHIFT&HIBYTE(Setup->wHotKey))
		Mod|=MOD_SHIFT;	
	if(!RegisterHotKey(m_hWnd,1,Mod,LOBYTE(Setup->wHotKey)))
		CMsgBox::MessageBox(m_hWnd,IDS_ERR_HOTKEY,IDS_ERR,MB_OK,IDI_INFO);
}
/*------------------------------------------------------------------------------*/
//
void CMainWnd::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
	switch(lParam)
	{
	case WM_LBUTTONDBLCLK:
		{
			ShowWindow(m_hWnd,SW_SHOWNORMAL);
			SetForegroundWindow(m_hWnd);
			SetActiveWindow(m_hWnd);
		}
		break;
	case WM_RBUTTONDOWN:
		{
			HMENU hMenu=LoadMenu(hInstX,LPCTSTR(IDR_POP));
			HMENU hSub=GetSubMenu(hMenu,0);
			SetForegroundWindow(m_hWnd);
			

			POINT pt;
			GetCursorPos(&pt);
			
			DWORD dwID=TrackPopupMenu(hSub,TPM_RIGHTALIGN|TPM_BOTTOMALIGN|TPM_RETURNCMD,pt.x,pt.y,0,m_hWnd,0);
			{
				switch(dwID)
				{
				case ID_SHOWCHATER:
					SendMessage(m_hWnd,WM_COMMAND,IDC_MSG,0);
					break;
				case ID_SHOW:
					ShowWindow(m_hWnd,SW_SHOWNORMAL);
					SetForegroundWindow(m_hWnd);
					SetActiveWindow(m_hWnd);
					break;
				case ID_EXIT:
					SendMessage(m_hWnd,WM_CLOSE,0,0);
					break;
				case ID_ABOUT:
					if(IsWindowEnabled(m_hWnd))
						SendMessage(m_hWnd,WM_COMMAND,IDC_ABOUT,0);
					break;
				case ID_CALL:
					if(IsWindowEnabled(m_hWnd))
						SendMessage(m_hWnd,WM_COMMAND,IDC_CALL,0);
					break;
				case ID_H:
					SendMessage(m_hWnd,WM_COMMAND,IDC_HP,0);
					break;
				}
			}

		}

		
	}
}
/*------------------------------------------------------------------------------*/
//implementation of about dialog
CAboutDlg::CAboutDlg()
{
	
}
/*------------------------------------------------------------------------------*/
CAboutDlg::~CAboutDlg()
{

}
/*------------------------------------------------------------------------------*/
LRESULT CAboutDlg::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_COMMAND:
		{
			CGraphDlg::OnCommand(wParam,lParam);
			switch(LOWORD(wParam))
			{
			case IDC_LOGO:
				KillTimer(m_hWnd,1);
				ShowWindow(m_cd1,SW_HIDE);
				ShowWindow(m_cd2,SW_HIDE);
				ShowWindow(m_rw,SW_SHOW);
				break;
			case IDC_CREDIT:
				if(!IsWindowVisible(m_cd1))
					SetTimer(m_hWnd,1,30,0);
				SetTimer(m_hWnd,1,30,0);
				ShowWindow(m_cd1,SW_SHOW);
				ShowWindow(m_cd2,SW_SHOW);
				ShowWindow(m_rw,SW_HIDE);
				break;
			}
		
		}
		break;
	case WM_INITDIALOG:
		{
			CGraphDlg::OnInitDialog();
			SetWindowText(m_hWnd,"关于NetTalk");
			MoveWindow(GetDlgItem(m_hWnd,IDC_CONTAINER),7,50,286,182,FALSE);
			m_rw.Create((CRectX&)CRectX(0,0,286,182),GetDlgItem(m_hWnd,IDC_CONTAINER),IDB_LOGO1,286,182);
			m_cd1.Create(GetDlgItem(m_hWnd,IDC_CONTAINER));
			m_cd2.Create(GetDlgItem(m_hWnd,IDC_CONTAINER));
			SetWindowPos(m_cd1,0,0,0,0,0,SWP_NOSIZE);
			CRectX rc;
			GetWindowRect(m_cd1,&rc);
			SetWindowPos(m_cd2,0,0,rc.Height(),0,0,SWP_NOSIZE);
			SendDlgItemMessage(m_hWnd,IDC_LOGO,BM_SETCHECK,BST_CHECKED,0);
			return FALSE;
		}
		break;
	case WM_TIMER:
		{
			CGraphDlg::OnTimer(wParam);
			CRectX rc1,rc2,rc3;
			GetWindowRect(m_cd1,&rc1);
			GetWindowRect(m_cd2,&rc2);
			GetWindowRect(GetDlgItem(m_hWnd,IDC_CONTAINER),&rc3);
			OffsetRect(&rc1,-rc3.left,-rc3.top);
			OffsetRect(&rc2,-rc3.left,-rc3.top);
			
			SetWindowPos(m_cd1,0,0,rc1.top-1,0,0,SWP_NOSIZE);
			SetWindowPos(m_cd2,0,0,rc2.top-1,0,0,SWP_NOSIZE);
			if(rc1.bottom<0)
			{
				SetWindowPos(m_cd1,0,0,rc2.bottom-1,0,0,SWP_NOSIZE);
			}
			if(rc2.bottom<0)
			{
				SetWindowPos(m_cd2,0,0,rc1.bottom-1,0,0,SWP_NOSIZE);
			}
			
		}break;
	

	default:
		return CGraphDlg::WndProc(uMsg,wParam,lParam);
	}
	return TRUE;
}
/*------------------------------------------------------------------------------*/
//implementation of IP input dialog
CIPInput::CIPInput()
{
	m_szIP[0]=0;
	m_uPort=0;
}
/*------------------------------------------------------------------------------*/
CIPInput::~CIPInput()
{

}
/*------------------------------------------------------------------------------*/
LRESULT CIPInput::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_COMMAND:
		{
			
			switch(LOWORD(wParam))
			{
			case IDC_OK:
				{
					GetDlgItemText(m_hWnd,IDC_IP,m_szIP,29);
					if(strlen(m_szIP)>0)
					{
						//set the result to variables
						char sz[20];
						GetDlgItemText(m_hWnd,IDC_PORT,sz,19);
						m_uPort=(unsigned short)strtoul(sz,0,10);
						
						//update the recent call address
						HWND hcb=GetDlgItem(m_hWnd,IDC_IP);
						int iItem=SendMessage(hcb,CB_FINDSTRING,-1,(LPARAM)m_szIP);
						if(iItem<0)
							SendMessage(hcb,CB_INSERTSTRING,0,(LPARAM)m_szIP);
						else
						{
							SendMessage(hcb,CB_DELETESTRING,iItem,0);
							SendMessage(hcb,CB_INSERTSTRING,0,(LPARAM)m_szIP);
						}
						
						int iCount=SendMessage(hcb,CB_GETCOUNT,0,0);
						if(iCount>20)
							iCount=20;
						char szI[4];
						
						for(int i=0;i<iCount;i++)
						{
							sprintf(szI,"%d",i);
							SendMessage(hcb,CB_SETCURSEL,iCount-i-1,0);
							GetWindowText(hcb,m_szIP,256);
							WritePrivateProfileString("recent",szI,m_szIP,"NetTalk.ini");
						}						
						sprintf(szI,"%d",iCount);
						WritePrivateProfileString("recent","count",szI,"NetTalk.ini");
						//
						EndDialog(m_hWnd,TRUE);
					}

				}
				break;
			case IDC_CANCEL:
				EndDialog(m_hWnd,FALSE);
				break;
			case IDC_ADDR:
				{
					HWND h=GetParent(m_hWnd);
					EndDialog(m_hWnd,FALSE);
					CAddrBook ab;
					ab.DoModal(LPCTSTR(IDD_ADDR),h);
				}
				break;
			}
			CGraphDlg::OnCommand(wParam,lParam);
		}
		break;
	case WM_INITDIALOG:
		{
			SetWindowText(m_hWnd,"请输入对方IP或计算机名");
			CGraphDlg::OnInitDialog();
			char sz[10];
			sprintf(sz,"%d",PORT);
			SetDlgItemText(m_hWnd,IDC_PORT,sz);
			//载入最近呼叫
			int c=GetPrivateProfileInt("recent","count",0,"NetTalk.ini");
			if(c>=20)
			{
				c=20;
			}
			char szStr[256];
			for(int i=0;i<c;i++)
			{
				char szI[4];
				sprintf(szI,"%d",i);

⌨️ 快捷键说明

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