📄 main.cpp
字号:
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);
}
}
break;
case IDC_VIDEO_ONOFF:
{
if(m_bSendVideo)
{
m_bSendVideo=FALSE;
AVIO.VideoSend(FALSE);
m_btnOnoff.LoadBitmaps(IDB_VIDEO_ONOFF4,IDB_VIDEO_ONOFF5,IDB_VIDEO_ONOFF6);
}
else
{
m_bSendVideo=TRUE;
AVIO.VideoSend(TRUE);
m_btnOnoff.LoadBitmaps(IDB_VIDEO_ONOFF1,IDB_VIDEO_ONOFF2,IDB_VIDEO_ONOFF3);
}
}
}
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);
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 t=GetTickCount();
DWORD f=AVIO.GetFrameCount();
DWORD ds=AVIO.GetDataSend();
DWORD dr=AVIO.GetDataRcv();
char sz[30];
sprintf(sz,"%dfps",(f-m_nFrameCount)*1000/(t-m_nTimePass));
DrawFps(sz);
sprintf(sz,"%.1fkbps",((float)ds-m_nDataSend+(float)dr-m_nDataRcv)*8000.0/((float)t-m_nTimePass)/1024.0);
DrawDataRate(sz);
if(dr-m_nDataRcv==0)
m_iZeroCount++;
else
m_iZeroCount=0;
if(m_iZeroCount>5)
{
KillTimer(m_hWnd,2);
MessageBox(m_hWnd,"网络不通,通话已中断","NetTalk信息",MB_OK|MB_ICONINFORMATION);
DrawFps("");
DrawDataRate("");
AVIO.EndTalk();
ShowWindow(m_vs,SW_HIDE);
ShowWindow(m_LocalVideoWnd.m_vs,SW_HIDE);
ShowWindow(m_RemoteVideoWnd.m_vs,SW_HIDE);
}
m_nFrameCount=f;
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[100];
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);
if(MessageBox(m_hWnd,sz,"NetTalk收到通话请求",MB_YESNO|MB_ICONINFORMATION|MB_SYSTEMMODAL)==IDYES)
{
AVIO.Accept();
ShowWindow(m_LocalVideoWnd,SW_SHOWNORMAL);
ShowWindow(m_hWnd,SW_SHOWNORMAL);
SetForegroundWindow(m_hWnd);
m_nTimePass=GetTickCount();
m_nDataRcv=0;
m_nDataSend=0;
m_nFrameCount=0;
m_iZeroCount=0;
SetTimer(m_hWnd,2,1000,0);
}
else
AVIO.Refuse();
}break;
case IOMN_ACCEPT:
{
AVIO.OnAccept();
ShowWindow(m_LocalVideoWnd,SW_SHOWNORMAL);
ShowWindow(m_hWnd,SW_SHOWNORMAL);
m_nTimePass=GetTickCount();
m_nDataRcv=0;
m_nDataSend=0;
m_nFrameCount=0;
m_iZeroCount=0;
SetTimer(m_hWnd,2,1000,0);
}
break;
case IOMN_END:
{
AVIO.EndTalk();
KillTimer(m_hWnd,2);
DrawFps("");
DrawDataRate("");
if(HIWORD(wParam)==E_USER)
{
MessageBox(m_hWnd,"对方已经结束了通话","NetTalk信息",MB_OK);
HDC hdc=GetDC(m_hWnd);
OnEraseBkgnd(hdc);
ReleaseDC(m_hWnd,hdc);
}
ShowWindow(m_vs,SW_HIDE);
ShowWindow(m_LocalVideoWnd.m_vs,SW_HIDE);
ShowWindow(m_RemoteVideoWnd.m_vs,SW_HIDE);
}
break;
case IOMN_REFUSE:
{
switch(HIWORD(wParam))
{
case R_TIMEOUT:
MessageBox(m_hWnd,"呼叫超时,对方没有响应!","NetTalk",MB_ICONINFORMATION);
break;
case R_USER:
MessageBox(m_hWnd,"您的呼叫被对方拒绝","NetTalk",MB_ICONINFORMATION);
break;
case R_BUSY:
MessageBox(m_hWnd,"对方正在通话或呼叫,您的呼叫被拒绝","NetTalk",MB_ICONINFORMATION);
break;
}
}
break;
case IOMN_ERR:
{
switch(HIWORD(wParam))
{
case IOME_SOCKET:
MessageBox(m_hWnd,"Socket发生错误","NetTalk出错",MB_ICONWARNING);
break;
case IOME_AUDIO_IN:
MessageBox(m_hWnd,"音频输入初始化失败","NetTalk出错",MB_ICONWARNING);
break;
case IOME_AUDIO_OUT:
MessageBox(m_hWnd,"音频输出初始化失败","NetTalk出错",MB_ICONWARNING);
break;
case IOME_VIDEO_IN:
MessageBox(m_hWnd,"视频输入初始化失败","NetTalk出错",MB_ICONWARNING);
break;
case IOME_VIDEO_OUT:
//always good
break;
case IOME_AUDIO_CODEC:
MessageBox(m_hWnd,"音频编码解码器初始化失败","NetTalk出错",MB_ICONWARNING);
break;
case IOME_VIDEO_CODEC:
MessageBox(m_hWnd,"视频编码解码器初始化失败","NetTalk出错",MB_ICONWARNING);
break;
}
}break;
}
}
//////////////////
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()));
}
void CMainWnd::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
switch(lParam)
{
case WM_LBUTTONDBLCLK:
{
ShowWindow(m_hWnd,SW_SHOWNORMAL);
SetForegroundWindow(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_SHOW:
ShowWindow(m_hWnd,SW_SHOWNORMAL);
SetForegroundWindow(m_hWnd);
break;
case ID_EXIT:
SendMessage(m_hWnd,WM_CLOSE,0,0);
break;
case ID_ABOUT:
SendMessage(m_hWnd,WM_COMMAND,IDC_ABOUT,0);
break;
case ID_CALL:
SendMessage(m_hWnd,WM_COMMAND,IDC_CALL,0);
break;
case ID_H:
SendMessage(m_hWnd,WM_COMMAND,IDC_HP,0);
break;
}
}
}
}
////////////////////////////////
CAboutDlg::CAboutDlg()
{
}
CAboutDlg::~CAboutDlg()
{
}
LRESULT CAboutDlg::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK:
OnOK();
break;
}
}
break;
case WM_CLOSE:
{
EndDialog(m_hWnd,0);
}
break;
default:
return FALSE;
}
return TRUE;
}
///////////////////////////////////////
///////////////////////
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);
char sz[20];
GetDlgItemText(m_hWnd,IDC_PORT,sz,19);
m_uPort=(unsigned short)strtoul(sz,0,10);
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;
}
}
break;
case WM_INITDIALOG:
SetDlgItemText(m_hWnd,IDC_PORT,"1159");
break;
case WM_CLOSE:
EndDialog(m_hWnd,FALSE);
break;
default:
return CDialogX::WndProc(uMsg,wParam,lParam);
}
return TRUE;
}
//////////////////////////////////////////
CSetupDlg::CSetupDlg()
{
}
CSetupDlg::~CSetupDlg()
{
}
LRESULT CSetupDlg::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
if(s.bAutoRun)
SendMessage(GetDlgItem(m_hWnd,IDC_AUTORUN),BM_SETCHECK,BST_CHECKED,0);
if(s.bInitShow)
SendMessage(GetDlgItem(m_hWnd,IDC_INITSHOW),BM_SETCHECK,BST_CHECKED,0);
if(s.bMiniHide)
SendMessage(GetDlgItem(m_hWnd,IDC_MINIHIDE),BM_SETCHECK,BST_CHECKED,0);
}
return FALSE;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDC_OK:
s.bAutoRun=FALSE;
s.bInitShow=FALSE;
s.bMiniHide=FALSE;
if(BST_CHECKED==SendMessage(GetDlgItem(m_hWnd,IDC_AUTORUN),BM_GETCHECK,0,0))
{
s.bAutoRun=TRUE;
}
if(BST_CHECKED==SendMessage(GetDlgItem(m_hWnd,IDC_INITSHOW),BM_GETCHECK,0,0))
{
s.bInitShow=TRUE;
}
if(BST_CHECKED==SendMessage(GetDlgItem(m_hWnd,IDC_MINIHIDE),BM_GETCHECK,0,0))
{
s.bMiniHide=TRUE;
}
SaveSetup();
OnOK();
break;
case IDC_CANCEL:
OnCancel();
break;
}
}
break;
default:
return CDialogX::WndProc(uMsg,wParam,lParam);
}
return TRUE;
}
void CSetupDlg::LoadSetup()
{
s.bAutoRun=(BOOL)GetPrivateProfileInt("setup","auto",0,"NetTalk.ini");
s.bInitShow=(BOOL)GetPrivateProfileInt("setup","initshow",0,"NetTalk.ini");
s.bMiniHide=(BOOL)GetPrivateProfileInt("setup","minihide",1,"NetTalk.ini");
}
SETUP CSetupDlg::s;
void CSetupDlg::SaveSetup()
{
char sz[2];
sz[1]=0;
if(s.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");
}
}
WritePrivateProfileString("setup","auto",sz,"NetTalk.ini");
if(s.bInitShow)
sz[0]='1';
else
sz[0]='0';
WritePrivateProfileString("setup","initshow",sz,"NetTalk.ini");
if(s.bMiniHide)
sz[0]='1';
else
sz[0]='0';
WritePrivateProfileString("setup","minihide",sz,"NetTalk.ini");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -