?? tapi3dlg.cpp
字號:
m_pCall = NULL;
isRealDisc = true;
}
if (m_pCallInfo != NULL && pCall == m_pCallersBasicCall)
{
TRACE("ReleaseTheCall CallInfo (%X) --\n",(int)m_pCallInfo);
m_pCallInfo->Release();
m_pCallInfo = NULL;
isRealDisc = true;
}
if (m_pCallOnHold != NULL && pCall == m_pCallOnHold)
{
TRACE("ReleaseTheCall Call (%X) --\n",(int)m_pCallOnHold);
m_pCallOnHold->Release();
m_pCallOnHold = NULL;
isRealDisc = true;
}
if (m_pCalledOnHold != NULL && pCall == m_pCalledOnHold)
{
TRACE("ReleaseTheCall Call (%X) --\n",(int)m_pCalledOnHold);
m_pCalledOnHold->Release();
m_pCalledOnHold = NULL;
isRealDisc = true;
}
if (m_pCallersBasicCall != NULL && pCall == m_pCallersBasicCall)
{
TRACE("ReleaseTheCall Call (%X) --\n",(int)m_pCallersBasicCall);
m_pCallersBasicCall->Release();
m_pCallersBasicCall = NULL;
isRealDisc = true;
}
/* if (m_pTransferConsultCall != NULL && pCall == m_pTransferConsultCall)
{
m_pTransferConsultCall->Release();
m_pTransferConsultCall = NULL;
isRealDisc = false;
}
*/
if (!isRealDisc)
return;
GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_HOLDCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);
GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(false);
GetDlgItem(IDM_PARK_CALL)->EnableWindow(false);
GetDlgItem(IDM_BLIND_TRANSFER)->EnableWindow(false);
GetDlgItem(IDM_SWAP_HOLD)->EnableWindow(false);
}
BEGIN_MESSAGE_MAP(CTapi3Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(IDM_EXIT, OnExit)
ON_COMMAND(IDM_INIT_TAPI, OnInitTapi)
ON_COMMAND(IDM_ABOUT, OnAbout)
ON_BN_CLICKED(IDC_CLEAR, OnClear)
ON_COMMAND(IDM_DEINIT_TAPI, OnDeinitTapi)
ON_LBN_DBLCLK(IDC_MSGBOX, OnDblclkMsgbox)
ON_CBN_SELCHANGE(IDC_EXTN_LIST, OnSelchangeExtnCall)
ON_COMMAND(IDM_MAKE_CALL, OnMakeCall)
ON_COMMAND(ID_CALLCONTROL_ANSWERCALL, OnAnswerCall)
ON_COMMAND(ID_CALLCONTROL_HOLDCALL, OnHold)
ON_COMMAND(ID_CALLCONTROL_UNHOLDCALL, OnUnHold)
ON_COMMAND(ID_CALLCONTROL_DROPCALL, OnDropCall)
ON_COMMAND(IDM_PARK_CALL, OnParkCall)
ON_COMMAND(IDM_UNPARK_CALL, OnUnparkCall)
ON_COMMAND(IDM_CALLCONFERENCE, OnCallConference)
ON_COMMAND(IDM_ADDTOCONF, OnAddToConference)
ON_COMMAND(IDM_REMOVEFROMCONF, OnRemoveFromConference)
ON_COMMAND(IDM_CALLTRANSFER, OnCallTransfer)
ON_COMMAND(IDM_BLIND_TRANSFER, OnBlindTransfer)
ON_COMMAND(IDM_SWAP_HOLD, OnSwapHold)
ON_COMMAND(IDM_TRANSFER_FINISH, OnTransferFinish)
ON_COMMAND(IDM_EXPAND, OnExpand)
ON_COMMAND(IDM_COLLAPSE, OnCollapse)
ON_MESSAGE(WM_TAPI_EVENT, OnTAPIEvent) // My own user message for TAPI event
END_MESSAGE_MAP()
// CTapi3Dlg message handlers
BOOL CTapi3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
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);
}
}
// 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
// Intialises the OLE library
AfxOleInit();
GetDlgItem(IDM_MAKE_CALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_HOLDCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);
GetDlgItem(IDM_INIT_TAPI)->EnableWindow(true);
GetDlgItem(IDM_DEINIT_TAPI)->EnableWindow(false);
GetDlgItem(IDM_EXPAND)->EnableWindow(false);
GetDlgItem(IDM_COLLAPSE)->EnableWindow(false);
GetDlgItem(IDC_CLEAR)->EnableWindow(false);
GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(false);
GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false);
GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false);
GetDlgItem(IDM_PARK_CALL)->EnableWindow(false);
GetDlgItem(IDM_UNPARK_CALL)->EnableWindow(false);
GetDlgItem(IDM_BLIND_TRANSFER)->EnableWindow(false);
GetDlgItem(IDM_SWAP_HOLD)->EnableWindow(false);
GetDlgItem(IDM_ADDTOCONF)->EnableWindow(false);
GetDlgItem(IDM_REMOVEFROMCONF)->EnableWindow(false);
return TRUE; // return TRUE unless you set the focus to a control
}
void CTapi3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 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 CTapi3Dlg::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 CTapi3Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CTapi3Dlg::OnCancel()
{
// Shutdown TAPI
OnDeinitTapi();
// Close the dialog
CDialog::OnCancel();
}
void CTapi3Dlg::OnOK()
{
// Override OnOK to do nothing
}
void CTapi3Dlg::OnExit()
{
// This is same as OnCancel
OnCancel();
}
void CTapi3Dlg::OnInitTapi()
{
CWaitCursor wait;
if (!m_bTAPIInit)
{
// Initialise TAPI3
if (!m_TAPI3.Init())
{
PRINT_INIT(-1, 0, "Failed to initialise TAPI3!");
}
else
{
GetDlgItem(IDM_DEINIT_TAPI)->EnableWindow(true);
GetDlgItem(IDM_EXPAND)->EnableWindow(true);
GetDlgItem(IDM_COLLAPSE)->EnableWindow(true);
GetDlgItem(IDC_CLEAR)->EnableWindow(true);
GetDlgItem(IDM_INIT_TAPI)->EnableWindow(false);
m_bTAPIInit=true;
PopulateExtnCombo();
}
}
}
void CTapi3Dlg::OnDeinitTapi()
{
// Clear TAPI objects being displayed
OnClear();
OnClearInit();
// Delete the telephonyEngine
if (m_pTEngine != NULL)
{
delete m_pTEngine;
m_pTEngine = NULL;
}
// if there is still a call,
// release it
//
ReleaseTheCall(NULL);
// Deinitialise TAPI3
if (m_bTAPIInit)
{
m_TAPI3.DeInit();
m_bTAPIInit = false;
ClearExtCombo();
GetDlgItem(IDM_INIT_TAPI)->EnableWindow(true);
GetDlgItem(IDM_DEINIT_TAPI)->EnableWindow(false);
GetDlgItem(IDM_EXPAND)->EnableWindow(false);
GetDlgItem(IDM_COLLAPSE)->EnableWindow(false);
GetDlgItem(IDC_CLEAR)->EnableWindow(false);
GetDlgItem(IDM_MAKE_CALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_HOLDCALL)->EnableWindow(false);
GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);
GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(false);
GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false);
GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false);
GetDlgItem(IDM_PARK_CALL)->EnableWindow(false);
GetDlgItem(IDM_UNPARK_CALL)->EnableWindow(false);
GetDlgItem(IDM_BLIND_TRANSFER)->EnableWindow(false);
GetDlgItem(IDM_SWAP_HOLD)->EnableWindow(false);
GetDlgItem(IDM_ADDTOCONF)->EnableWindow(false);
GetDlgItem(IDM_REMOVEFROMCONF)->EnableWindow(false);
}
}
void CTapi3Dlg::OnAbout()
{
// Open the about box
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
void CTapi3Dlg::OnTAPIEvent(WPARAM wParam, LPARAM lParam)
{
TAPI_EVENT Type = (TAPI_EVENT)wParam;
IDispatch *pEvent = (IDispatch*)lParam;
int index;
HRESULT hr;
ITCallNotificationEvent* pCallNotificationEvent;
switch(Type)
{
case TE_TAPIOBJECT:
PRINT(-1, 0, "-TE_TAPIOBJECT");
break;
case TE_ADDRESS:
PRINT(-1, 0, "-TE_ADDRESS");
break;
case TE_CALLNOTIFICATION:
{
// Store the event pointer into listbox
index = PRINT(-1, 0, "+TE_CALLNOTIFICATION");
CCallNotificationEvent* pTEvent = new CCallNotificationEvent(pEvent);
SET_ITEM_DATA_PTR(index, pTEvent);
hr = pEvent->QueryInterface(IID_ITCallNotificationEvent, (LPVOID*)&pCallNotificationEvent);
if (hr == S_OK)
{
HandleCallNotificationEvent(pCallNotificationEvent);
pCallNotificationEvent->Release();
}
else
{
PRINT_INIT(-1, 0, "Failed to obtain ITCallNotificationEvent Interface, hr=%x", hr);
}
}
break;
case TE_CALLSTATE:
{
// Store the event pointer into listbox
index = PRINT(-1, 0, "+TE_CALLSTATE");
CCallStateEvent* pTEvent = new CCallStateEvent(pEvent);
SET_ITEM_DATA_PTR(index, pTEvent);
ITCallStateEvent* pCallStateEvent;
hr = pEvent->QueryInterface(IID_ITCallStateEvent, (LPVOID*)&pCallStateEvent);
if (hr == S_OK)
{
HandleCallStateEvent(pCallStateEvent);
pCallStateEvent->Release();
}
else
{
PRINT_INIT(-1, 0, "Failed to obtain ITCallStateEvent Interface, hr=%x", hr);
}
}
break;
case TE_CALLMEDIA:
PRINT(-1, 0, "-TE_CALLMEDIA");
break;
case TE_CALLHUB:
{
// Store the event pointer into listbox
index = PRINT(-1, 0, "+TE_CALLHUB");
CCallHubEvent* pTEvent = new CCallHubEvent(pEvent);
SET_ITEM_DATA_PTR(index, pTEvent);
ITCallHubEvent* pCallHubEvent;
hr = pEvent->QueryInterface(IID_ITCallHubEvent, (LPVOID*)&pCallHubEvent);
if (hr == S_OK)
{
//HandleCallHubEvent(pCallHubEvent);
pCallHubEvent->Release();
}
else
{
PRINT_INIT(-1, 0, "Failed to obtain ITCallHubEvent Interface, hr=%x", hr);
}
}
break;
case TE_CALLINFOCHANGE:
{
index = PRINT(-1, 0, "+TE_CALLINFOCHANGE");
CCallInfoChangeEvent* pTEvent = new CCallInfoChangeEvent(pEvent);
SET_ITEM_DATA_PTR(index, pTEvent);
}
break;
case TE_PRIVATE:
PRINT(-1, 0, "-TE_PRIVATE");
break;
case TE_REQUEST:
PRINT(-1, 0, "-TE_REQUEST");
break;
case TE_AGENT:
PRINT(-1, 0, "-TE_AGENT");
break;
case TE_AGENTSESSION:
PRINT(-1, 0, "-TE_AGENTSESSION");
break;
case TE_QOSEVENT:
PRINT(-1, 0, "-TE_QOSEVENT");
break;
case TE_AGENTHANDLER:
PRINT(-1, 0, "-TE_AGENTHANDLER");
break;
case TE_ACDGROUP:
PRINT(-1, 0, "-TE_ACDGROUP");
break;
case TE_QUEUE:
PRINT(-1, 0, "-TE_QUEUE");
break;
case TE_DIGITEVENT:
PRINT(-1, 0, "-TE_DIGITEVENT");
break;
case TE_GENERATEEVENT:
PRINT(-1, 0, "-TE_GENERATEEVENT");
break;
default:
PRINT(-1, 0, "-Unknown event type!");
break;
}
// Done with message so release it
pEvent->Release();
}
void CTapi3Dlg::OnDblclkMsgbox()
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -