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