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

📄 settingsapp.cpp

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

        NewWindow = pVolumeSettingsDialog->GetDialog();
        break;

    case SettingsApp_t::IdRingTones:
        pRingTonesSettingsDialog = new RingTonesSettingsDialog_t(m_TopScreen);
        if (!pRingTonesSettingsDialog)
        {
            return E_OUTOFMEMORY;
        }
        hr = pRingTonesSettingsDialog->CreateDialogScreen();
        if (FAILED(hr))
        {
            delete pRingTonesSettingsDialog;
            return hr;
        }

        NewWindow = pRingTonesSettingsDialog->GetDialog();
        break;

    case SettingsApp_t::IdViewServerSettings:
        pViewServerSettingsDialog = new ViewServerSettingsDialog_t();
        if (!pViewServerSettingsDialog)
        {
            return E_OUTOFMEMORY;
        }

        hr = pViewServerSettingsDialog->CreateDialogScreen();
        if (FAILED(hr))
        {
            delete pViewServerSettingsDialog;
            return hr;
        }

        NewWindow = pViewServerSettingsDialog->GetDialog();
        break;

    case SettingsApp_t::IdEditServerSettings:
        pEditServerSettingsDialog = new EditServerSettingsDialog_t(m_TopId != IdViewServerSettings); 
        if (!pEditServerSettingsDialog)
        {
            return E_OUTOFMEMORY;
        }

        hr = pEditServerSettingsDialog->CreateDialogScreen();
        if (FAILED(hr))
        {
            delete pEditServerSettingsDialog;
            return hr;
        }

        NewWindow = pEditServerSettingsDialog->GetDialog();
        break;
        
    case SettingsApp_t::IdWindowsLogon:
        pWindowsLogonDialog = new WindowsLogonDialog_t();
        if (! pWindowsLogonDialog)
        {
            return E_OUTOFMEMORY;
        }

        hr = pWindowsLogonDialog->CreateDialogScreen();
        if (FAILED(hr))
        {
            delete pWindowsLogonDialog;
            return hr;
        }

        NewWindow = pWindowsLogonDialog->GetDialog();
        break;
        
    case SettingsApp_t::IdSetPIN:
        pSetPINDialog = new SetPINDialog_t();
        if (! pSetPINDialog)
        {
            return E_OUTOFMEMORY;
        }

        hr = pSetPINDialog->CreateDialogScreen();
        if (FAILED(hr))
        {
            delete pSetPINDialog;
            return hr;
        }

        NewWindow = pSetPINDialog->GetDialog();
        break;

    default:
        ASSERT(FALSE);
        return E_FAIL;
    }

    ASSERT(NewWindow);
    if (! NewWindow)
    {
        return E_FAIL;
    }

    //destroy the old top window and push the id on the queue
    if (m_TopScreen)
    {
        m_Stack.push_front(m_TopId);
        ToDestroy = m_TopScreen;
    }

    m_TopScreen = NewWindow;
    m_TopId     = id;
    SetForegroundWindow(m_TopScreen);
    
    if (ToDestroy)
    {
        DestroyWindow(ToDestroy);
    }

    return hr;
}

HRESULT 
SettingsApp_t::GoBackToPreviousScreen()
{
    //Clean Help screen
    SettingsMenu_t::CleanupHelpScreen();

    if (m_Stack.empty())
    {
        DestroyWindow(m_TopScreen);
        m_TopScreen = NULL;

        PostQuitMessage(0);
        return S_OK;
    }

    HWND DestroyMe = m_TopScreen;
    m_TopScreen = NULL;

    ScreenId    IdToCreate = m_Stack.front();
    m_Stack.pop_front();
    
    HRESULT hr = CreateNewWindow(IdToCreate);
    if (FAILED(hr))
    {
        m_TopScreen = DestroyMe;
        m_Stack.push_front(IdToCreate);
        return hr;
    }

    DestroyWindow(DestroyMe);
    return S_OK;
}

/*------------------------------------------------------------------------------
    SettingsApp_t::OnCommandLine
    
    Handle a new command line request - verify the user is authenticated or
    wait for the auth challenge to finish.
------------------------------------------------------------------------------*/
HRESULT
SettingsApp_t::OnCommandLine(
    ScreenId    id
    )
{
    HWND OldTopWindow = m_TopScreen;

    //clear the stack...
    m_Stack.clear();
    m_TopScreen = NULL;
    m_TopId     = IdLast;         

    PH_AUTHENTICATE_USER_PARAMETERS Params = {0};
    HRESULT hr;
    
    if (m_WaitingForAuth)
    {
        hr = E_ACCESSDENIED;
        goto exit;
    }

    Params.NotificationMessage = WM_SETTINGS_AUTH_REQUEST_COMPLETE;
    Params.NotificationWindow  = m_HiddenWindow;
    Params.StructSize          = sizeof(Params);

    hr = PHAuthenticateUser(
        &Params
        );
    if (FAILED(hr))
    {
        goto exit;
    }

    switch (Params.Result)
    {
    case AuthSucceeded:
        hr = CreateNewWindow(id);
        break;

    case AuthInProgress:
        m_PendingAuthScreenId = id;
        m_WaitingForAuth      = true;
        hr = S_OK;
        break;

    default:
        ASSERT(FALSE);
        hr = E_UNEXPECTED;
        goto exit;
    }
    
exit:
    if (IsWindow(OldTopWindow))
    {
        DestroyWindow(OldTopWindow);
    }
    return hr;
}

HRESULT
SettingsApp_t::OnAuthRequestComplete(
    AuthenticationResult_e  Result
    )
{
    if (! m_WaitingForAuth)
    {
        ASSERT(FALSE);
        return E_UNEXPECTED;
    }

    HRESULT hr  = S_OK;

    ScreenId    id = m_PendingAuthScreenId;

    //reset our auth vars
    m_PendingAuthScreenId = IdLast;
    m_WaitingForAuth      = false;

    if (Result == AuthSucceeded)
    {
        hr = CreateNewWindow(
            id
            );
    }
    else
    {
        GoBackToPreviousScreen();
    }

    return hr;
}

LRESULT 
SettingsApp_t::HiddenWndProc(
    HWND   hwndDialog, 
    UINT   uMsg, 
    WPARAM wParam,
    LPARAM lParam
    )
{
    if (hwndDialog != m_HiddenWindow || ! m_IsRunning)
    {
        goto exit;
    }

    switch (uMsg)
    {         
    case WM_NEW_COMMAND_LINE:
        return OnCommandLine(
            static_cast<ScreenId>(wParam)
            );
        
    case WM_SETTINGS_AUTH_REQUEST_COMPLETE:
        return OnAuthRequestComplete(
            static_cast<AuthenticationResult_e>(wParam)
            );
        
    case WM_SETTINGSMENU_DONE:
        if (static_cast<ScreenId>(wParam) == PHMENU_CANCELLED)
        {
            return GoBackToPreviousScreen();
        }
        else
        {
            return SettingsMenu_t::OnMenuDone(
                m_TopScreen,
                static_cast<ScreenId>(wParam)
                );
        }

    case WM_HELP:
        return SettingsMenu_t::OnHelp(m_HiddenWindow);

    case WM_NOTIFY:
        switch(wParam)
        {
        case IDC_HELPMSG_OK:
            SettingsMenu_t::CleanupHelpScreen();
            break;
        }
        return S_OK;

    case WM_HIBERNATE:         
        Exit(); 
        break; 

    default:
        break;
    }
exit:
    return DefWindowProc(hwndDialog, uMsg, wParam, lParam);
}


HRESULT
SettingsApp_t::Exit(
    void
    )
{
    if (! m_IsRunning)
    {
        return S_FALSE;
    }

    DestroyWindow(m_TopScreen);
    m_TopScreen = NULL; 

    m_Stack.clear(); 

    PostQuitMessage(0);

    return S_OK; 
}

⌨️ 快捷键说明

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