Click here to Skip to main content
15,891,529 members
Articles / Desktop Programming / MFC

VideoIPPhone

Rate me:
Please Sign up or sign in to vote.
4.29/5 (7 votes)
12 Mar 2005CPOL 74.4K   8K   72  
VOIP using Microsoft TAPI
// MsTapiClassTestDlg.cpp : ���� ����
//

#include "stdafx.h"
#include "MsTapiClassTest.h"
#include "MsTapiClassTestDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// ���� ���α׷� ������ ���Ǵ� CAboutDlg ��ȭ �����Դϴ�.

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// ��ȭ ���� ������
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ����

// ����
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CMsTapiClassTestDlg ��ȭ ����



CMsTapiClassTestDlg::CMsTapiClassTestDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMsTapiClassTestDlg::IDD, pParent)
	, m_strIPAddress(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMsTapiClassTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT_IP_ADDRESS, m_strIPAddress);
	DDX_Control(pDX, IDC_BTN_CALL, m_btnCall);
	DDX_Control(pDX, IDC_BTN_ANSWER, m_btnAnswer);
	DDX_Control(pDX, IDC_BTN_END, m_btnEnd);
}

BEGIN_MESSAGE_MAP(CMsTapiClassTestDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_PRIVATETAPIEVENT, OnPrivate)
	ON_MESSAGE(WM_ANSWER, OnAnswer)
	ON_MESSAGE(WM_DISCONNECT, OnDisconnect)
	ON_BN_CLICKED(IDC_BTN_CALL, OnBnClickedBtnCall)
	ON_BN_CLICKED(IDC_BTN_ANSWER, OnBnClickedBtnAnswer)
	ON_BN_CLICKED(IDC_BTN_END, OnBnClickedBtnEnd)
END_MESSAGE_MAP()


// CMsTapiClassTestDlg �޽��� ó����

BOOL CMsTapiClassTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// �ý��� �޴��� "����..." �޴� �׸��� �߰��մϴ�.

	// IDM_ABOUTBOX�� �ý��� ��� ������ �־�� �մϴ�.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// �� ��ȭ ������ �������� �����մϴ�. ���� ���α׷��� �� â�� ��ȭ ���ڰ� �ƴ� ��쿡��
	// �����ӿ�ũ�� �� �۾��� �ڵ����� �����մϴ�.
	SetIcon(m_hIcon, TRUE);			// ū �������� �����մϴ�.
	SetIcon(m_hIcon, FALSE);		// ���� �������� �����մϴ�.

	// TODO: ���⿡ �߰� �ʱ�ȭ �۾��� �߰��մϴ�.
	Incoming();
	m_btnAnswer.ShowWindow(SW_HIDE);
	m_btnEnd.ShowWindow(SW_HIDE);
	return TRUE;  // ��Ʈ�ѿ� ���� ��Ŀ���� �������� ���� ��� TRUE�� ��ȯ�մϴ�.
}

void CMsTapiClassTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// ��ȭ ���ڿ� �ּ�ȭ ���߸� �߰��� ��� �������� �׸����� 
// �Ʒ� �ڵ尡 �ʿ��մϴ�. ����/�� ���� ����ϴ� MFC ���� ���α׷��� ��쿡��
// �����ӿ�ũ���� �� �۾��� �ڵ����� �����մϴ�.

void CMsTapiClassTestDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // �׸��⸦ ���� ����̽� ���ؽ�Ʈ

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// Ŭ���̾�Ʈ �簢������ �������� ����� ����ϴ�.
		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;

		// �������� �׸��ϴ�.
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// ����ڰ� �ּ�ȭ�� â�� ��� ���ȿ� Ŀ���� ǥ�õǵ��� �ý��ۿ���
//  �� �Լ��� ȣ���մϴ�. 
HCURSOR CMsTapiClassTestDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

LRESULT CMsTapiClassTestDlg::OnPrivate(WPARAM wParam, LPARAM lParam)
{
	OnTapiEvent((TAPI_EVENT) wParam,(IDispatch *) lParam);
	return 0;
}

LRESULT CMsTapiClassTestDlg::OnAnswer(WPARAM wParam, LPARAM lParam)
{
	m_btnCall.ShowWindow(SW_HIDE);
	m_btnAnswer.ShowWindow(SW_SHOW);
	return 0;
}

LRESULT CMsTapiClassTestDlg::OnDisconnect(WPARAM wParam, LPARAM lParam)
{
	if(incoming.gpCall != NULL)
	{
		IncomingEnd();
		Incoming();
	}
	if(outgoing.gpCall != NULL)
	{
		OutgoingEnd();
	}
	m_btnAnswer.ShowWindow(SW_HIDE);
	m_btnEnd.ShowWindow(SW_HIDE);
	m_btnCall.ShowWindow(SW_SHOW);
	return 0;
}

void CMsTapiClassTestDlg::OnBnClickedBtnCall()
{
	// TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
	g_hDlg = this->GetSafeHwnd();
	char szIpAddress[255] = {0};
	WCHAR wszIpAddress[255] = {0};

	UpdateData(TRUE);

	sprintf(szIpAddress, "%s", m_strIPAddress);
	mbstowcs(wszIpAddress, szIpAddress, 255);

	outgoing.StartMsTapi(4, wszIpAddress);
	m_btnCall.ShowWindow(SW_HIDE);
	m_btnEnd.ShowWindow(SW_SHOW);
}

void CMsTapiClassTestDlg::OnBnClickedBtnAnswer()
{
	// TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
	incoming.gpCall = g_pCall;
	incoming.AnswerTheCall();
	m_btnAnswer.ShowWindow(SW_HIDE);
	m_btnEnd.ShowWindow(SW_SHOW);
}

void CMsTapiClassTestDlg::OnBnClickedBtnEnd()
{
	// TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
	if(incoming.gpCall != NULL)
	{
		IncomingEnd();
		Incoming();
	}
	if(outgoing.gpCall != NULL)
	{
		OutgoingEnd();
	}
	m_btnAnswer.ShowWindow(SW_HIDE);
	m_btnEnd.ShowWindow(SW_HIDE);
	m_btnCall.ShowWindow(SW_SHOW);
}

void CMsTapiClassTestDlg::Incoming(void)
{
	g_hDlg = this->GetSafeHwnd();
	incoming.StartMsTapi();
}

void CMsTapiClassTestDlg::OutgoingEnd(void)
{
	outgoing.EndMsTapi();
	g_pCall = NULL;
}

void CMsTapiClassTestDlg::IncomingEnd(void)
{
	incoming.EndMsTapi();
	g_pCall = NULL;
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer interpay
Korea (Republic of) Korea (Republic of)
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions