MediaClientDlg.cpp
上传用户:hhs829
上传日期:2022-06-17
资源大小:586k
文件大小:6k
- // MediaClientDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "MediaClient.h"
- #include "MediaClientDlg.h"
- #include "CFilterGraph.h"
- #include "CMediaSocketClient.h"
- #include "CDataAdmin.h"
- #include "CLocalMachine.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CMediaClientDlg dialog
- CMediaClientDlg::CMediaClientDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CMediaClientDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CMediaClientDlg)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- m_pGraph = NULL;
- m_pReceiver = NULL;
- m_bConnected = false;
- m_pDataList = NULL;
- }
- void CMediaClientDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CMediaClientDlg)
- DDX_Control(pDX, IDC_STATIC_HOSTIP, m_hostIP);
- DDX_Control(pDX, IDC_STATIC_HOST, m_host);
- DDX_Control(pDX, IDC_STATIC_COUNT, m_Counter);
- DDX_Control(pDX, IDC_VIDEOWND, m_videoWnd);
- DDX_Control(pDX, IDC_BUTTON_TRANS, m_btnTrans);
- DDX_Control(pDX, IDC_IPADDRESS1, m_ipCtrl);
- DDX_Control(pDX, IDC_BUTTON_CONNECT, m_btnConnect);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CMediaClientDlg, CDialog)
- //{{AFX_MSG_MAP(CMediaClientDlg)
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_WM_DESTROY()
- ON_BN_CLICKED(IDC_BUTTON_CONNECT, OnButtonConnect)
- ON_BN_CLICKED(IDC_BUTTON_TRANS, OnButtonTrans)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMediaClientDlg message handlers
- BOOL CMediaClientDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
-
- // COM initialize...
- if (FAILED(CoInitialize(NULL)))
- {
- AfxMessageBox("COM初始化失败!");
- return FALSE;
- }
- char host[255], hostIP[255];
- CLocalMachine myhost;
- myhost.GetIPAddress(hostIP, host);
- m_host.SetWindowText(host);
- m_hostIP.SetWindowText(hostIP);
- m_btnConnect.SetWindowText("连 接");
- m_btnTrans.EnableWindow(FALSE);
- m_ipCtrl.SetAddress(127, 0, 0, 1);
-
- m_pDataList = new CDataAdmin();
- // Create a filter graph and set video window
- m_pGraph = new CFilterGraph(m_pDataList);
- m_pGraph->BuildGraph();
- m_pGraph->SetVideoWndOwner(m_videoWnd.GetSafeHwnd());
- RECT rect;
- m_videoWnd.GetClientRect(&rect);
- m_pGraph->SetWindowPosition(0, 0, rect.right - rect.left, rect.bottom - rect.top);
-
- return TRUE; // return TRUE unless you set the focus to a control
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CMediaClientDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CMediaClientDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- void CMediaClientDlg::OnDestroy()
- {
- CDialog::OnDestroy();
- // Release buffers
- SAFE_DELETE(m_pReceiver)
- SAFE_DELETE(m_pGraph)
- Sleep(1000);
- SAFE_DELETE(m_pDataList)
- // Finished with COM
- CoUninitialize();
- }
- void CMediaClientDlg::OnButtonConnect()
- {
- if (m_bConnected)
- {
- CloseSession();
- }
- else
- {
- OpenSession();
- }
- // Update the window text
- if (m_bConnected)
- {
- m_btnConnect.SetWindowText("断 开");
- m_btnTrans.EnableWindow(TRUE);
- }
- else
- {
- m_btnConnect.SetWindowText("连 接");
- m_btnTrans.EnableWindow(FALSE);
- }
- }
- // Request the server to disconnect...
- void CMediaClientDlg::CloseSession(void)
- {
- if (m_pReceiver)
- {
- char pData[sizeof(MSG_HEADER)];
- PMSG_HEADER pMsg = (PMSG_HEADER) pData;
- pMsg->nDataSize = 0;
- pMsg->nMsgType = DISCONNECT_REQUEST;
- m_pReceiver->Send(pData, sizeof(MSG_HEADER));
- }
- }
- void CMediaClientDlg::OpenSession(void)
- {
- // Create a socket to connect to the server
- SAFE_DELETE(m_pReceiver)
- m_pReceiver = new CMediaSocketClient();
- m_pReceiver->SetRecvBuffer(m_pDataList);
- m_pReceiver->SetCountWnd(m_Counter.GetSafeHwnd());
- // Connect to the server
- char lpszServerAddr[20];
- BYTE nField[4];
- m_ipCtrl.GetAddress(nField[0], nField[1], nField[2], nField[3]);
- sprintf(lpszServerAddr,"%d.%d.%d.%d",nField[0],nField[1],nField[2],nField[3]);
- if (m_pReceiver->Connect(lpszServerAddr, BASE_SOCKET_PORT))
- {
- m_bConnected = true;
- m_pReceiver->StartReceiving();
- }
- else
- {
- m_bConnected = false;
- AfxMessageBox("远程连接失败!");
- }
- }
- // Request the server to send data...
- void CMediaClientDlg::OnButtonTrans()
- {
- if (m_pReceiver)
- {
- char pData[sizeof(MSG_HEADER)];
- PMSG_HEADER pMsg = (PMSG_HEADER) pData;
- pMsg->nDataSize = 0;
- pMsg->nMsgType = DATA_REQUEST;
- m_pReceiver->Send(pData, sizeof(MSG_HEADER));
- }
- }