📄 main.cpp
字号:
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 + -