⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callforwarding.cpp

📁 一个WinCE6。0下的IP phone的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            goto exit;
        }

        //add it to the bottom of the list
        hr = ListBox.AddItem(-1, pItem);
        if (FAILED(hr))
        {
            delete pItem;
            goto exit;
        }

        pwchCurrentNumber = pwchNextNumber;
        if (*pwchCurrentNumber == L';')
        {
            pwchCurrentNumber++;
        }
    }

    //select first item by default
    SendMessage(ListBox, LB_SETCURSEL, 0, 0);

    return hr;

exit:
    ASSERT(FALSE);
    return hr;
}

HRESULT 
CallForwardingDialog_t::AddForwardingEnabledItems(
    void
    )
{
    ListBox_t       ListBox;
    ce::auto_bstr   bstrForwardingURI;
    HRESULT         hr = S_OK;
    CCallerIDDisplayItem_t *pItem = NULL;

    ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
    //get the autoforward
    hr = GetAutoForwardNumber(&bstrForwardingURI);
    if (FAILED(hr) || bstrForwardingURI == NULL)
    {
        ASSERT(FALSE);
        return hr;
    }

    //add the autoforward item
    pItem = new CCallerIDDisplayItem_t(bstrForwardingURI);
    if (! pItem)
    {
        ASSERT(FALSE);
        return E_OUTOFMEMORY;
    }

    hr = ListBox.AddItem(-1, pItem);
    if (FAILED(hr))
    {
        delete pItem;
    }

    return hr;
}

HRESULT
CallForwardingDialog_t::UpdateStatusHeader(
    void
    )
{
    UINT statusHeader = (m_fAutoForwarding) ? 
        IDS_FORWARDENABLED_HEADER : 
        IDS_FORWARDDISABLED_HEADER;

    STATUS_HEADER_PARAMETERS Parameters = {
                                GlobalData_t::s_ModuleInstance, 
                                statusHeader, 
                                shpDefault, 
                                0, 
                                INFINITE
                                };

    return (HRESULT)SendMessage(
        GetDlgItem(m_DialogScreen, IDC_STATUSREGION), 
        WM_STATUSHEADER_ADDSTATUSNOTIFICATION, 
        (WPARAM)sizeof(STATUS_HEADER_PARAMETERS), 
        (LPARAM)&Parameters
        ); 
}

HRESULT
CallForwardingDialog_t::UpdateMenuBar(
    void
    )
{
    HRESULT            hr = S_OK;    
    UINT               MenuId  = 0;
    IVoIPDisplayItem*  pSelectedItem = NULL;
    int                IdxSelected = 0; 
    MenuBar_t          MenuBar;
    BOOL               HasText = FALSE;
    
    GetSelectedDisplayItem(
        &pSelectedItem, 
        &IdxSelected
        ); 
    if (pSelectedItem == NULL)
    {
        return E_UNEXPECTED; 
    } 

    if (m_fAutoForwarding)
    {
        MenuId = IDMB_CALLFORWARDING_DISABLE_BUTTONS;
    }
    else if (IdxSelected == 0)
    {
        WCHAR Buf[3] = L"";
        pSelectedItem->GetText(Buf, _countof(Buf));

        HasText = (Buf[0] != 0);
        MenuId  = IDMB_CALLFORWARDING_ENABLE_SIP_BACKSPACE_BUTTONS;
    }
    else
    {
        MenuId = IDMB_CALLFORWARDING_ENABLE_DELETE_BUTTONS;
    }

    MenuBar = GetDlgItem(m_DialogScreen, IDC_MENUBAR);
    if (MenuId != m_CurrentMenuId)
    {
        m_CurrentMenuId = MenuId;
        
        hr = MenuBar.SetMenu(
                GlobalData_t::s_ModuleInstance, 
                MenuId
                );
        ASSERT(SUCCEEDED(hr));
    }

    if (MenuId == IDMB_CALLFORWARDING_ENABLE_SIP_BACKSPACE_BUTTONS)
    {
        hr = MenuBar.ShowMenuButton(
            IDC_BACKSPACE, 
            HasText
            );
    }

    return hr;
}

void
CallForwardingDialog_t::GetSelectedDisplayItem(
    IVoIPDisplayItem**          ppSelectedDisplayItem,
    int*                        pItemIndex       
    )
{
    if (ppSelectedDisplayItem == NULL)
    {
        return; 
    }

    ListBox_t ListBox;
    ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
    *ppSelectedDisplayItem = NULL; 
    
    int SelectedIndex = SendMessage(
                            ListBox, 
                            LB_GETCURSEL, 
                            0, 0
                            ); 
    if (SelectedIndex == -1)
    {
        return;
    }

    if (pItemIndex != NULL)
    {
        *pItemIndex = SelectedIndex; 
    }

    *ppSelectedDisplayItem = static_cast<IVoIPDisplayItem*>(ListBox.GetItem(SelectedIndex)); 

    return;     
}

HRESULT 
CallForwardingDialog_t::OnDelete(
    void                                    
    )
{
    IVoIPDisplayItem*       pSelectedItem = NULL;
    int                     IdxSelected; 
    WCHAR                   wszText[MAX_PATH] = L"";
    HRESULT                 hr = S_OK;


    if (!m_fAutoForwarding)
    {
        GetSelectedDisplayItem(
        &pSelectedItem, 
        &IdxSelected
        ); 

        if (pSelectedItem && IdxSelected > 0)
        {
          pSelectedItem->GetText(wszText, _countof(wszText)); 
        }

        if (pSelectedItem && wszText[0])
        {
            hr = DeleteAutoForwardString(wszText);
        }

        if (SUCCEEDED(hr))
        {
            Initialize(); 
            ListBox_t ListBox;
            ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
            SendMessage(ListBox, LB_SETCURSEL, IdxSelected-1, 0);
        }             
    }
    return hr;
}

HRESULT 
CallForwardingDialog_t::OnDeleteAll(
    void                                    
    )
{
    if (m_MessageBox)
    {
        DestroyWindow(m_MessageBox);
        m_MessageBox = NULL;
    }

    ListBox_t ListBox;
    ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);

    UINT ItemCount = ListBox.GetCount()-1;
    if (ItemCount <= 0)
    {
        return S_FALSE;
    }

    WCHAR   Question[MAX_PATH] = L"";
    PREFAST_SUPPRESS(5428, "It is safe to use StringCchPrintfW (known parameters)");
    StringCchPrintfW(
        Question, 
        _countof(Question),
        CommonUtilities_t::LoadString(
            GlobalData_t::s_ModuleInstance, 
            IDS_POPUP_DELETEALLITEMS
            ),
        ItemCount
        );

    if (! Question[0])
    {
        ASSERT(FALSE);
        return E_FAIL;
    }

    PH_MESSAGE_BOX_PARAMETERS   Params = {0};

    Params.Flags    = VDF_TYPE_MODELESS;
    Params.Instance = GlobalData_t::s_ModuleInstance;
    Params.IconId   = IDB_POPUP_CONFIRM_DELETE;
    Params.MenuId   = IDMB_YESNO;
    Params.Owner    = m_DialogScreen;
    Params.pText    = Question;
    Params.pTitle   = CommonUtilities_t::LoadString(
                        GlobalData_t::s_ModuleInstance, 
                        IDS_TITLE_CONFIRMDELETE
                        );
    Params.StructSize = sizeof(Params);

    if (! PHMessageBox(&Params))
    {
        ASSERT(FALSE);
        return E_FAIL;
    }

    m_MessageBox        = Params.result.Dialog;

    return S_OK;
}

HRESULT 
CallForwardingDialog_t::OnTurnOnOff(
    void                                    
    )
{
    ce::auto_bstr     bstrAutoForward;
    IVoIPDisplayItem*           pSelectedItem = NULL;
    int                         IdxSelected; 
    WCHAR             wszText[MAX_PATH] = L"";
    HRESULT           hr                = S_OK;

    //if we were auto-forwarding, disable forwarding by setting the forward URI
    //to empty
    if (m_fAutoForwarding)
    {
        bstrAutoForward = SysAllocString(L"");
        if (bstrAutoForward == NULL)
        {
            return E_OUTOFMEMORY;
        }
        m_fAutoForwarding = 0;
    }
    else
    {
        GetSelectedDisplayItem(
            &pSelectedItem, 
            &IdxSelected
            ); 
    
        if (pSelectedItem == NULL)
        {
            return E_UNEXPECTED; 
        } 

        pSelectedItem->GetText(wszText, _countof(wszText)); 
        if (pSelectedItem && wszText[0])
        {
            bstrAutoForward = SysAllocString(wszText);
            if (bstrAutoForward == NULL)
            {
                return E_OUTOFMEMORY;
            }
        }

        if (bstrAutoForward != NULL)
        {
            AddNewAutoForwardString(bstrAutoForward);
            //set forwarding number
            hr = RegistrySetString(
                SN_VOIP_FORWARDINGNUMBER_ROOT, 
                SN_VOIP_FORWARDINGNUMBER_PATH, 
                SN_VOIP_FORWARDINGNUMBER_VALUE, 
                wszText
                ); 
            if (FAILED(hr))
            {
                ASSERT (FALSE);
            }
        }
        m_fAutoForwarding = 1;
    }

    //put the forwarding uri and refresh the display
    if (bstrAutoForward != NULL)
    {
        //if the autoforwarding is on, turn the DND off
        PHSetValue(phsDoNotDisturb, 0);
        PHSetValue(phsCallForwarding, m_fAutoForwarding);

        if (m_fAutoForwarding == 0)
        {
            hr = RegistrySetString(
                SN_VOIP_FORWARDINGNUMBER_ROOT, 
                SN_VOIP_FORWARDINGNUMBER_PATH, 
                SN_VOIP_FORWARDINGNUMBER_VALUE, 
                L""
                ); 
            if (FAILED(hr))
            {
                ASSERT (FALSE);
            }
        }

        Initialize();
    }

    return hr;
}

HRESULT
CallForwardingDialog_t::GetAutoForwardNumber(
    BSTR*   pbstrAutoForward
    )
{
    if (pbstrAutoForward == NULL)
        return E_POINTER;     

    WCHAR wszForwardingNumbers[MAX_PATH] = L"";
    HRESULT hr = RegistryGetString(
        SN_VOIP_FORWARDINGNUMBER_ROOT, 
        SN_VOIP_FORWARDINGNUMBER_PATH, 
        SN_VOIP_FORWARDINGNUMBER_VALUE, 
        wszForwardingNumbers,
        _countof(wszForwardingNumbers)
        ); 
    if (HRESULT_CODE(hr) == ERROR_FILE_NOT_FOUND) 
    {
        *pbstrAutoForward = SysAllocString(L"");
        hr = S_OK;
    }
    else
    {
        *pbstrAutoForward = SysAllocString(wszForwardingNumbers);
    }
    if (! *pbstrAutoForward)
    {
        return E_OUTOFMEMORY;
    }
    return hr;
}

/*------------------------------------------------------------------------------
    CCallForwardingState::SaveCurrentEntry
    
    Save whatever is there at edit entry to the global variable
------------------------------------------------------------------------------*/
HRESULT 
CallForwardingDialog_t::SaveCurrentEntry(
    void
    )
{
    ListBox_t ListBox;
    IVoIPDisplayItem *pItem             = NULL;
    ListBox = GetDlgItem(m_DialogScreen, IDC_LISTBOX);

    WCHAR wszRecoveryEntry[MAX_PATH] = L"";
    if (!m_fAutoForwarding)
    {
        pItem = static_cast<IVoIPDisplayItem*>(ListBox.GetItem(0)); 
        if (pItem)
        {
            pItem->GetText(wszRecoveryEntry, _countof(wszRecoveryEntry));
            HRESULT hr = RegistrySetString(
                SN_VOIP_RECOVERPARTIALFORWARDING_ROOT, 
                SN_VOIP_RECOVERPARTIALFORWARDING_PATH, 
                SN_VOIP_RECOVERPARTIALFORWARDING_VALUE, 
                wszRecoveryEntry
                ); 
            if (FAILED(hr))
            {
                ASSERT (FALSE);
            }
        }
    }

    return S_OK; 
}

HRESULT 
CallForwardingDialog_t::OnClearForwardingList(
    void                                    
    )
{
    ListBox_t           ListBox;
    ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
    HRESULT             hr = S_OK;

    if (!m_fAutoForwarding)
    {
        hr = RegistrySetString(
            SN_VOIP_LISTOFFORWARDINGNUMBER_ROOT, 
            SN_VOIP_LISTOFFORWARDINGNUMBER_PATH, 
            SN_VOIP_LISTOFFORWARDINGNUMBER_VALUE, 
            L""
            ); 
        if (FAILED(hr))
        {
            ASSERT (FALSE);
            return hr;
        }

        Initialize();
        SendMessage(ListBox, LB_SETCURSEL, 0, 0);
    }

    return hr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -