📄 ptphelpdlg.cpp
字号:
menu->CheckMenuItem(AUDIO_SEND,MF_BYCOMMAND | MF_UNCHECKED);
}
else
{
//Start recording audio
record->ResumeThread();
//record->PostThreadMessage(WM_RECORDSOUND_STARTRECORDING,0,0);
isAudioSend=TRUE;
menu->CheckMenuItem(AUDIO_SEND,MF_BYCOMMAND | MF_CHECKED);
}
}
/**
* Enables/Disables reception of audio
* Invoked when user presses Audio -> Receive menu item
*/
void CPTPHelpDlg::OnAudioReceive()
{
if(isAudioReceive)
{
isAudioReceive=FALSE;
menu->CheckMenuItem(AUDIO_RECEIVE,MF_BYCOMMAND | MF_UNCHECKED);
}
else
{
isAudioReceive=TRUE;
menu->CheckMenuItem(AUDIO_RECEIVE,MF_BYCOMMAND | MF_CHECKED);
}
}
/**
* Enables/Disables transmission of video
* Invoked when user presses Video-> Send menu item
*/
void CPTPHelpDlg::OnVideoSend()
{
if(isVideoSend)
{
isVideoSend=FALSE;
menu->CheckMenuItem(VIDEO_SEND,MF_BYCOMMAND | MF_UNCHECKED);
}
else
{
isVideoSend=TRUE;
menu->CheckMenuItem(VIDEO_SEND,MF_BYCOMMAND | MF_CHECKED);
}
}
/**
* Enables/Disables reception of video
* Invoked when user presses Video -> Receive menu item
*/
void CPTPHelpDlg::OnVideoReceive()
{
if(isVideoReceive)
{
isVideoReceive=FALSE;
menu->CheckMenuItem(VIDEO_RECEIVE,MF_BYCOMMAND | MF_UNCHECKED);
}
else
{
isVideoReceive=TRUE;
menu->CheckMenuItem(VIDEO_RECEIVE,MF_BYCOMMAND | MF_CHECKED);
}
}
/**
* Display the about dialog box
*/
void CPTPHelpDlg::OnAbout()
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
/**
* Send the message to remote host
*/
void CPTPHelpDlg::OnSendMesg()
{
unsigned char data[500];
GetDlgItemText(IDC_EDIT1,(char*)data,500);
if(strlen((const char*)data)>0)
{
dtext.SendTextData(data,strlen((const char*)data));
SetDlgItemText(IDC_EDIT1,"");
}
}
void CPTPHelpDlg::OnSnap()
{
GetDlgItem(IDC_SNAP)->EnableWindow(false);
GetDlgItem(IDC_PICSAVE)->EnableWindow(true);
GetDlgItem(IDC_STOPSNAP)->EnableWindow(true);
isPicdata=true;
isSnap=true;
}
void CPTPHelpDlg::OnPicSave()
{
CString strFilter;
CString m_FileName;
strFilter="Bmp Files(*.bmp)|*.*||";
CFileDialog dlg(FALSE, NULL, NULL, OFN_EXPLORER|OFN_HIDEREADONLY|
OFN_ENABLESIZING|OFN_FILEMUSTEXIST,strFilter);
//dlg.m_ofn.lStructSize = sizeof(OPENFILENAME);
if(dlg.DoModal() == IDOK )
{
m_FileName=dlg.GetFileName();//GetPathName();
CFile fp;
fp.Open(m_FileName,CFile::modeCreate | CFile::modeWrite);
BITMAPFILEHEADER bmfHdr; //定义文件头
BITMAPINFOHEADER bmiHdr; //定义信息头
//RGBQUAD rgbQuad[256]; //定义调色板
//对信息头进行赋值
//bmiHdr=&m_bmpinfo->bmiHeader;
//对调色板进行赋值
// for(i=0; i<256; i++)
// {
// rgbQuad[i].rgbBlue = (BYTE)i;
// rgbQuad[i].rgbGreen = (BYTE)i;
// rgbQuad[i].rgbRed = (BYTE)i;
// rgbQuad[i].rgbReserved = 0;
//}
//对文件头进行赋值
bmfHdr.bfType = (WORD)0x4D42;//;((WORD)('M'<<8) | 'B')
bmfHdr.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+IMAGE_WIDTH*IMAGE_HEIGHT*3);
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits=(DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER));
fp.Write((LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER)); //写文件头
fp.Write((LPSTR)&m_bmpinfo->bmiHeader,sizeof(BITMAPINFOHEADER)); //写信息头
//fp.Write((LPSTR)rgbQuad,sizeof(RGBQUAD)*256); //写调色板
//fp.Write(lpvBuffer2Bits,m_WidthOfModel*m_HeightOfModel);//写数据
fp.Write(imagedata,IMAGE_WIDTH*IMAGE_HEIGHT*3);//写数据
fp.Close();
}
}
void CPTPHelpDlg::OnStopSnap()
{
GetDlgItem(IDC_SNAP)->EnableWindow(true);
GetDlgItem(IDC_PICSAVE)->EnableWindow(false);
GetDlgItem(IDC_STOPSNAP)->EnableWindow(false);
isPicdata=false;
isSnap=false;
}
void CPTPHelpDlg::OnQuerrySource()
{
ShellExecute(GetParent()->GetSafeHwnd(), "open", "http://firenet.topcool.net", NULL, NULL, SW_SHOW);
}
void CPTPHelpDlg::OnAdvice()
{
ShellExecute(GetParent()->GetSafeHwnd(), "open", "http://firenet.topcool.net", NULL, NULL, SW_SHOW);
}
void CPTPHelpDlg::OnSendFile()
{
}
void CPTPHelpDlg::OnResult()
{
CreatReport report;
report.DoModal();
}
/**
* Display mesg received from the remote host
*/
void CPTPHelpDlg::DisplayMesg(char *mesg)
{
list->AddString(mesg);
// Highlight the currently added string
// This will scroll the window automatically
list->SetCurSel(list->GetCount()-1);
}
/**
* Display frame got from remote host
*/
void CPTPHelpDlg::DisplayRemoteFrame(unsigned char *data,int size)
{
int retvalue;
// If remote view disabled then return...
if(!isViewRemoteVideo)
return;
// If video reception disabled..then return..
if(!isVideoReceive)
return;
retvalue=DecompressFrame(data,size,rgbdata,buffersize);
if(!retvalue)
{
log.WriteString("\n Decompression failed");
return;
}
if(isButtonShow)
{
GetDlgItem(IDC_SNAP)->EnableWindow(true);
isButtonShow=FALSE;
}
log.WriteString("\n Decompression succeeded");
if(!isSnap)
{
::DrawDibDraw(hdib,
m_hdc,
remote_wnd_x, // dest : left pos
remote_wnd_y, // dest : top pos
IMAGE_WIDTH*1.5,//-1, // don't stretch
IMAGE_HEIGHT*1.5,//-1, // don't stretch
&m_bmpinfo->bmiHeader, // bmp header info
rgbdata, // bmp data
0, // src :left
0, // src :top
IMAGE_WIDTH, // src : width
IMAGE_HEIGHT, // src : height
DDF_SAME_DRAW // use prev params....
);
}
else
{
if(isPicdata)
{
imagedata=new unsigned char[80000];
for(int k=0;k<80000;k++)
{
imagedata[k]=rgbdata[k];
}
isPicdata=false;
}
::DrawDibDraw(hdib,
m_hdc,
remote_wnd_x, // dest : left pos
remote_wnd_y, // dest : top pos
IMAGE_WIDTH*1.5,//-1, // don't stretch
IMAGE_HEIGHT*1.5,//-1, // don't stretch
&m_bmpinfo->bmiHeader, // bmp header info
imagedata, // bmp data
0, // src :left
0, // src :top
IMAGE_WIDTH, // src : width
IMAGE_HEIGHT, // src : height
DDF_SAME_DRAW // use prev params....
);
}
}
/**
*
* Send the video frame to the remote host...
*
*/
void CPTPHelpDlg::SendVideo(BYTE *data,int size)
{
CRect wndrect;
Bits bits; // Various count about compression
if(vidcap->isOver==TRUE)
return;
if(data==NULL)
return;
// Display the captured frame...
if(isViewLocalVideo)
{
::DrawDibDraw(hdib,
m_hdc,
local_wnd_x, // dest : left pos
local_wnd_y, // dest : top pos
IMAGE_WIDTH*1.5,//-1, // don't stretch
IMAGE_HEIGHT*1.5,//-1, // don't stretch
&m_bmpinfo->bmiHeader, // bmp header info
data, // bmp data
0, // src :left
0, // src :top
IMAGE_WIDTH, // src : width
IMAGE_HEIGHT, // src : height
DDF_SAME_DRAW // use prev params....
);
}
if(isVideoSend)
{
//log.WriteString("\n Converting to YUV format..");
//Convert the data from rgb format to YUV format
ConvertRGB2YUV(IMAGE_WIDTH,IMAGE_HEIGHT,data,yuv);
// Reset the counter
count=0;
//Compress the data...to h263
cparams.format=CPARAM_QCIF;
cparams.inter = CPARAM_INTRA;
cparams.Q_intra = 8;
cparams.data=yuv; // Data in YUV format...
CompressFrame(&cparams, &bits);
// Transmit the compressed frame
//log.WriteString("Transmitting the frame");
dvideo.SendVideoData(cdata,count);
}
}
void CPTPHelpDlg::StartConference()//两端开始对话
{
if(isStarted)
return;
//状态标志赋值
isStarted=TRUE;
isViewLocalVideo=TRUE;
isViewRemoteVideo=TRUE;
//相应的菜单项更改状态
menu->EnableMenuItem(CONF_CONNECT,MF_DISABLED | MF_GRAYED);
menu->EnableMenuItem(CONF_DISCONNECT,MF_ENABLED);
menu->EnableMenuItem(AUDIO_SEND,MF_ENABLED);
menu->EnableMenuItem(AUDIO_RECEIVE,MF_ENABLED);
menu->EnableMenuItem(VIDEO_SEND,MF_ENABLED);
menu->EnableMenuItem(VIDEO_RECEIVE,MF_ENABLED);
menu->EnableMenuItem(VIEW_LOCAL,MF_ENABLED);
menu->EnableMenuItem(VIEW_REMOTE,MF_ENABLED);
menu->CheckMenuItem(VIEW_LOCAL,MF_BYCOMMAND | MF_CHECKED);
menu->CheckMenuItem(VIEW_REMOTE,MF_BYCOMMAND | MF_CHECKED);
dtext.CreateSocket(PORT_TEXT,TYPE_TEXT);// 创建文本消息Socket
bsend->EnableWindow(TRUE);//"发送"按钮生效
daudio.CreateSocket(PORT_AUDIO,TYPE_AUDIO);//创建音频Socket
dvideo.CreateSocket(PORT_VIDEO,TYPE_VIDEO);//创建视频Socket
record->PostThreadMessage(WM_RECORDSOUND_STARTRECORDING,0,0);//开始录音
play->PostThreadMessage(WM_PLAYSOUND_STARTPLAYING,0,0);//开始放音
if(isVideo) // 开始视频捕捉
{
if(vidcap->StartCapture()==FALSE)
{
MessageBox("不能开始视频捕捉!");
isCaptureStarted=FALSE;
}
else
{
isCaptureStarted=TRUE;
}
}
}
void CPTPHelpDlg::OnMenuSkinLoad()
{
//---------------------------------------
//For AppFace
CString str =theApp.m_pszHelpFilePath ;
str = str.Left(str.ReverseFind(_T('\\'))) ;
CFileDialog f(TRUE,_T("bmp"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_NOCHANGEDIR,
_T("UI Resource Files (*.urf)|*.urf|All Files (*.*)|*.*||"),
this);
f.m_ofn.lpstrInitialDir = (LPCTSTR)str ;
if(IDOK == f.DoModal())
{
theApp.m_af.Start((LPTSTR)(LPCTSTR)f.GetPathName());
}
//---------------------------------------
}
void CPTPHelpDlg::OnMenuSkinNo()
{
//---------------------------------------
//For AppFace
theApp.m_af.Start();
//Do not call m_af.Remove() here !It will be released all the resource.
//---------------------------------------
}
/**
* Destroy the current conference
*/
void CPTPHelpDlg::DestroyConference()
{
// If not started / already destroyed..then return;
if(isStarted==FALSE)
return;
isStarted=FALSE;
isViewLocalVideo=FALSE;
isViewRemoteVideo=FALSE;
// Enable/disable menu items
menu->EnableMenuItem(CONF_CONNECT,MF_ENABLED);
menu->EnableMenuItem(CONF_DISCONNECT,MF_DISABLED | MF_GRAYED);
// Disable Text session
dtext.CloseSocket();
// Disable the send button...
bsend->EnableWindow(FALSE);
// Clear the contents of text chat windows
SetDlgItemText(IDC_EDIT1,"");
list->ResetContent();
// If recording is going on ...then stop it
if(isAudioSend)
record->SuspendThread();
record->PostThreadMessage(WM_RECORDSOUND_STOPRECORDING,0,0);
// stop audio session
daudio.CloseSocket();
// stop playing audio
play->PostThreadMessage(WM_PLAYSOUND_STOPPLAYING,0,0);
// stop capturing video
if(isVideo && isCaptureStarted)
vidcap->StopCapture();
// stop video session
dvideo.CloseSocket();
// Update local and remote viewer..
CWnd *wnd=(CWnd*)this->GetDlgItem(IDC_LOCALVIDEO);
wnd->Invalidate(TRUE);
wnd=(CWnd*)this->GetDlgItem(IDC_REMOTEVIDEO);
wnd->Invalidate(TRUE);
// Reset the status..
record->ResumeThread();
isAudioSend=TRUE;
menu->CheckMenuItem(AUDIO_SEND,MF_BYCOMMAND | MF_CHECKED);
isAudioReceive=TRUE;
menu->CheckMenuItem(AUDIO_RECEIVE,MF_BYCOMMAND | MF_CHECKED);
isVideoSend=TRUE;
menu->CheckMenuItem(VIDEO_SEND,MF_BYCOMMAND | MF_CHECKED);
isVideoReceive=TRUE;
menu->CheckMenuItem(VIDEO_RECEIVE,MF_BYCOMMAND | MF_CHECKED);
menu->EnableMenuItem(AUDIO_SEND,MF_GRAYED);
menu->EnableMenuItem(AUDIO_RECEIVE,MF_GRAYED);
menu->EnableMenuItem(VIDEO_SEND,MF_GRAYED);
menu->EnableMenuItem(VIDEO_RECEIVE,MF_GRAYED);
menu->EnableMenuItem(VIEW_LOCAL,MF_GRAYED);
menu->EnableMenuItem(VIEW_REMOTE,MF_GRAYED);
GetDlgItem(IDC_SNAP)->EnableWindow(false);
GetDlgItem(IDC_PICSAVE)->EnableWindow(false);
GetDlgItem(IDC_STOPSNAP)->EnableWindow(false);
/*if (imagedata!=NULL)
{
delete [] imagedata;
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -