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

📄 main.cpp

📁 NetTalk是一个适用于局域网和因特网的可视电话软件 一.开发环境 Windows2000 Server & Visual C++6.0 & SDK +自开发的CWndX类库(相当于简化的MF
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		while(GetMessage(&msg, NULL, 0, 0))
		{
			if (GetCapture()!=m_hWnd)
			{
				DispatchMessage(&msg);
				break;
			}
			switch(msg.message)
			{
			case WM_MOUSEMOVE:
				{
					POINT pt;
					pt.x=GET_X_LPARAM(msg.lParam);
					pt.y=GET_Y_LPARAM(msg.lParam);
					rc.left+=pt.x-point.x;
					rc.top+=pt.y-point.y;
					SetWindowPos(m_hWnd,0,rc.left,
						rc.top,0,0,SWP_NOSIZE);
				}
				break;
			case WM_LBUTTONUP:
				
				goto EXITLOOP;					
				
			default:
				DispatchMessage(&msg);
				break;
				
			}
		}
EXITLOOP:
		ReleaseCapture();
	}
	
}

/*------------------------------------------------------------------------------*/

void CMainWnd::OnLButtonUp(UINT nFlags, POINT &point)
{

}
/*------------------------------------------------------------------------------*/
//hilight the title bar
void CMainWnd::OnMouseMove(UINT nFlags, POINT point)
{
	if(PtInRegion(m_hrgnTitle,point.x,point.y)&&!m_bHilightTitleBar)
	{
		RECT rc;
		SetRect(&rc,5,5,168,22);
		m_bHilightTitleBar=TRUE;
		HDC hdc=GetDC(m_hWnd);
		HBITMAP hb=LoadBitmap(hInstX,LPCTSTR(IDB_TITLE2));
		DrawTransBmpX(hdc,rc,hb,0,0,0);
		DeleteObject(hb);
		ReleaseDC(m_hWnd,hdc);
		SetTimer(m_hWnd,1,50,0);
		
	}
	
}

/*------------------------------------------------------------------------------*/
BOOL CMainWnd::OnCommand(WPARAM wParam, LPARAM lParam)
{
	switch(LOWORD(wParam))
	{
	case IDC_CLOSE:
		OnClose();
		break;
	case IDC_MIN:
		ShowWindow(m_hWnd,SW_MINIMIZE);
		if(CSetupDlg::Setup.bMiniHide)
			ShowWindow(m_hWnd,SW_HIDE);
		break;
	case IDC_HP:
		{
			//打开帮助文件
			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),"help\\help.htm");
			ShellExecute(0,"open",szPath,0,0,SW_SHOWNORMAL);
		}
		break;
	case IDC_ABOUT:
		{
			CAboutDlg abt;
			abt.DoModal(LPCTSTR(IDD_ABOUT_DLG),m_hWnd);
			
		}
		break;
	case IDC_ADDR:
		{
			CAddrBook ab;
			ab.DoModal(LPCTSTR(IDD_ADDR),m_hWnd);
		}
		break;
	case 0:
		{
			//呼叫
			if(!AVIO.Call((char*)lParam,PORT))
				CMsgBox::MessageBox(m_hWnd,IDS_MSG_CALL_BUSY,IDS_ERR,MB_OK,IDI_INFO);
			else
			{
				if(!m_CallDlg.DoModal(m_hWnd,(char*)lParam))
				{
					if(AVIO.GetStatus()==STA_BUSY)
					{
						ShowWindow(m_vs,SW_HIDE);
						ShowWindow(m_LocalVideoWnd.m_vs,SW_HIDE);
						ShowWindow(m_RemoteVideoWnd.m_vs,SW_HIDE);
						KillTimer(m_hWnd,2);
						DrawFps("");
						DrawDataRate("");				
						
					}
					AVIO.EndTalk();
					
				}
			}
		}
		break;
	case IDC_CALL:
		{

			CIPInput ip;
			if(ip.DoModal(LPCTSTR(IDD_IPINPUT),m_hWnd))
			{
				SendMessage(m_hWnd,WM_COMMAND,0,(LPARAM)ip.m_szIP);
			}
		}
		break;
	case IDC_HANG:
		{
			//挂断
			if(AVIO.GetStatus()==STA_BUSY)
			{
				if(CMsgBox::MessageBox(m_hWnd,IDS_MSG_IFENDTALK,IDS_WAR,MB_YESNO,IDI_INFO)==IDYES)
				{
					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);				
				}
			}
			else
				AVIO.EndTalk();
		}
		break;
	case IDC_SETUP:
		{
			CSetupDlg sd;
			sd.DoModal(LPCTSTR(IDD_SETUP),m_hWnd);
		}
		break;
	case IDC_VIDEO_LOCAL:
		{
			if(IsWindowVisible(m_LocalVideoWnd))
			{
				AVIO.EnablePreview(FALSE);
				ShowWindow(m_LocalVideoWnd,SW_HIDE);
				
			}
			else
			{
				ShowWindow(m_LocalVideoWnd,SW_SHOW);
				AVIO.EnablePreview(TRUE);
				
			}
		}
		break;
	case IDC_VIDEO_OUTVIEW:
		{
			if(IsWindowVisible(m_RemoteVideoWnd))
			{
				ShowWindow(m_RemoteVideoWnd,SW_HIDE);
				AVIO.SetRemoteVideoRcvWnd(m_vs);
				ShowWindow(m_RemoteVideoWnd.m_vs,SW_HIDE);
				m_btnOutview.LoadBitmaps(IDB_VIDEO_OUTVIEW1,IDB_VIDEO_OUTVIEW2,IDB_VIDEO_OUTVIEW3);
			}
			else
			{
				ShowWindow(m_RemoteVideoWnd,SW_SHOW);
				AVIO.SetRemoteVideoRcvWnd(m_RemoteVideoWnd.m_vs);
				ShowWindow(m_vs,SW_HIDE);
				m_btnOutview.LoadBitmaps(IDB_VIDEO_OUTVIEW4,IDB_VIDEO_OUTVIEW5,IDB_VIDEO_OUTVIEW6);
				
			}
			InvalidateRect(m_btnOutview,0,FALSE);
		}
		break;
	case IDC_VIDEO_ONOFF:
		{//是否发送视频
			if(m_bSendVideo)
			{
				m_bSendVideo=FALSE;
				AVIO.VideoSend(FALSE);
				m_btnOnoff.LoadBitmaps(IDB_VIDEO_ONOFF1,IDB_VIDEO_ONOFF2,IDB_VIDEO_ONOFF3);
				
			}
			else
			{			
				m_bSendVideo=TRUE;
				AVIO.VideoSend(TRUE);
				m_btnOnoff.LoadBitmaps(IDB_VIDEO_ONOFF4,IDB_VIDEO_ONOFF5,IDB_VIDEO_ONOFF6);
			}
		}break;
	case IDC_SEND:
		{
			//发送文字信息
			char ip[50];
			GetDlgItemText(m_MsgTalk,IDC_OBJ,ip,50);
			AVIO.SendTxt(ip,PORT,(char*)lParam);
		}break;
	case IDC_MSG:
		{

			if(IsWindowVisible(m_MsgTalk))
				ShowWindow(m_MsgTalk,SW_HIDE);
			else
				ShowWindow(m_MsgTalk,SW_SHOW);
		}break;
	}
	return TRUE;
}
/*------------------------------------------------------------------------------*/
//画主窗口界面
void CMainWnd::OnEraseBkgnd(HDC hdc)
{
	
	RECT rc;
	GetClientRect(m_hWnd,&rc);	
	HDC hMemDC=CreateCompatibleDC(hdc);

	HBITMAP hFace=LoadBitmap(hInstX,LPCTSTR(IDB_FACE));
	HBITMAP hob=(HBITMAP)SelectObject(hMemDC,hFace);

	//画标题条(如果被Hilight的话)
	if(m_bHilightTitleBar)
	{
		RECT rc;
		SetRect(&rc,5,5,168,22);
		m_bHilightTitleBar=TRUE;
		
		HBITMAP hb=LoadBitmap(hInstX,LPCTSTR(IDB_TITLE2));
		DrawTransBmpX(hMemDC,rc,hb,0,0,0);
		DeleteObject(hb);
		
	}
	BitBlt(hdc,0,0,rc.right-rc.left,
		rc.bottom-rc.top,hMemDC,0,0,SRCCOPY);


	SelectObject(hMemDC,hob);
	DeleteObject(hFace);
	DeleteDC(hMemDC);
	
}

/*------------------------------------------------------------------------------*/
void CMainWnd::OnTimer(UINT nIDEvent)
{
	switch(nIDEvent)
	{
	case 1:
		POINT pt;
		GetCursorPos(&pt);
		ScreenToClient(m_hWnd,&pt);
		if(m_bHilightTitleBar&&!PtInRegion(m_hrgnTitle,pt.x,pt.y))
		{
			m_bHilightTitleBar=FALSE;
			RECT rc;
			SetRect(&rc,5,5,168,22);
			HDC hdc=GetDC(m_hWnd);
			HBITMAP hb=LoadBitmap(hInstX,LPCTSTR(IDB_TITLE1));
			DrawTransBmpX(hdc,rc,hb,0,0,0);
			DeleteObject(hb);
			ReleaseDC(m_hWnd,hdc);
			KillTimer(m_hWnd,nIDEvent);
			
		}
		break;
	case 2://draw fps and datarate
		{
			
			//得到发送的数据和接收的数据量
			DWORD ds=AVIO.GetDataSend();
			DWORD dr=AVIO.GetDataRcv();	
			
			DWORD t=GetTickCount();
				
			//画帧频率
			char sz[60];
			sprintf(sz,"%dfps",AVIO.GetFps());
			DrawFps(sz);
			//累计通话时间
			m_uTalkTime++;
			sprintf(sz,"%.1fkbps  %d%d:%d%d:%d%d",
				((float)ds-m_nDataSend+(float)dr-m_nDataRcv)*8000.0/((float)t-m_nTimePass)/1024.0,
				m_uTalkTime/36000,
				(m_uTalkTime/3600)%10,
				((m_uTalkTime/60)%60)/10,
				((m_uTalkTime/60)%60)%10,
				(m_uTalkTime%60)/10,
				(m_uTalkTime%60)%10);
			//画比特率和通话时间
			DrawDataRate(sz);

			//如果连续5次接收到的数据为0的话,结束通话
			if(dr-m_nDataRcv==0)
				m_iZeroCount++;
			else
				m_iZeroCount=0;
			
			if(m_iZeroCount>5)
			{
				
				AVIO.EndTalk();
				KillTimer(m_hWnd,2);
				ShowWindow(m_vs,SW_HIDE);
				ShowWindow(m_LocalVideoWnd.m_vs,SW_HIDE);
				ShowWindow(m_RemoteVideoWnd.m_vs,SW_HIDE);
				KillTimer(m_hWnd,2);
				DrawFps("");
				DrawDataRate("");
				CMsgBox::MessageBox(m_hWnd,IDS_ERR_NET_BLOCK,IDS_ERR,MB_OK,IDI_CUT);
			}
			
			m_nDataSend=ds;
			m_nDataRcv=dr;
			m_nTimePass=t;
			
		}
		break;
		
		
	}
}
/*------------------------------------------------------------------------------*/

BOOL CMainWnd::OnSetCursor(HWND hWnd, UINT nHitTest, UINT message)
{
	
	return FALSE;
}



/*------------------------------------------------------------------------------*/


HBRUSH CMainWnd::OnCtrlColorEdit(HDC hdc, HWND hwnd)
{
    SetTextColor(hdc,0x00ffffff);
	SetBkColor(hdc,0);
	return m_hbCtrlBg;
}

/*------------------------------------------------------------------------------*/

void CMainWnd::DrawFps(char* pszFps)
{
	SetDlgItemText(m_hWnd,IDC_FPS,pszFps);
	
}


/*------------------------------------------------------------------------------*/
//
void CMainWnd::OnAudioData(BOOL flag,CAVIOMgr* pMgr)
{
	
	if(!flag)//local
	{
		HDC hdc=GetDC(m_WaveShowIn);
		UINT len;
		char* p=pMgr->GetLocalAudio(len);
		m_WaveShowIn.Paint(hdc,p,len);
		ReleaseDC(m_WaveShowIn,hdc);
	}
	else
	{
		HDC hdc=GetDC(m_WaveShowOut);
		UINT len;
		char* p=pMgr->GetRemoteAudio(len);
		m_WaveShowOut.Paint(hdc,p,len);
		ReleaseDC(m_WaveShowOut,hdc);
	}
	
}

/*------------------------------------------------------------------------------*/

void CMainWnd::DrawDataRate(char* pszDataRate)
{
	SetDlgItemText(m_hWnd,IDC_DATARATE,pszDataRate);
	
}

/*------------------------------------------------------------------------------*/
HBRUSH CMainWnd::OnCtrlColorStatic(HDC hdc, HWND hwnd)
{
	if(hwnd==GetDlgItem(m_hWnd,IDC_FPS))
	{
		SetBkColor(hdc,0x00b9b4b3);
		SetTextColor(hdc,0x00ffffff);
		return m_hbFpsBg;
	}
	
	SetBkColor(hdc,0);
	SetTextColor(hdc,0x00aaeeff);  
	
	return m_hbCtrlBg;
}
/*------------------------------------------------------------------------------*/
//AVIOMgr的通知消息处理
void CMainWnd::OnIOMNotify(WPARAM wParam, LPARAM lParam)
{
	
	switch(LOWORD(wParam))
	{
	case IOMN_CALL://呼叫到来
		{
			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);
			SetActiveWindow(m_hWnd);
			
			if(m_RingDlg.DoModal(m_hWnd,sz))
			{
				
				ShowWindow(m_LocalVideoWnd,SW_SHOWNORMAL);
				ShowWindow(m_hWnd,SW_SHOWNORMAL);
				SetForegroundWindow(m_hWnd);
				SetActiveWindow(m_hWnd);
				m_uTalkTime=0;
				m_nTimePass=GetTickCount();
				m_nDataRcv=0;

				m_nDataSend=0;
				m_nFrameCount=0;
				m_iZeroCount=0;
				SetTimer(m_hWnd,2,1000,0);				
				AVIO.Accept();
				//接受了呼叫,把该次事件记录到log文件中
				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);
							
				

⌨️ 快捷键说明

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