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

📄 settingsmenu.cpp

📁 一个WinCE6。0下的IP phone的源代码
💻 CPP
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
#include "SettingsApp.hpp"
#include "SettingsMenu.hpp"
#include "Resource.h"
#include "Controls.hpp"
#include "VoIPNotify.hpp"
#include "SettingsBoolean.hpp"
#include "ServerSettings.hpp"
#include "SettingsApi.hpp"

static PHMS_ITEM s_MenuItems[] =
{
    { SettingsApp_t::IdCallForwarding    ,   IDS_CALLFORWARDING },
    { SettingsApp_t::IdDoNotDisturb      ,   IDS_DONOTDISTURB  },
    { SettingsApp_t::IdCallerIdBlocking  ,   IDS_CALLERIDBLOCK  },
    { SettingsApp_t::IdPhoneSettings     ,   IDS_PHONESETTINGS  },
    { SettingsApp_t::IdUserSettings      ,   IDS_USERSETTINGS  },
};

#define AUTODIAL_INDEX 2

static PHMS_ITEM s_PhoneSettingsMenuItems[] =
{
    { SettingsApp_t::IdVolumeSettings       ,   IDS_VOLUMESETTINGS },
    { SettingsApp_t::IdRingTones            ,   IDS_RINGTONES_TITLE  },
    { SettingsApp_t::IdAutoDial             ,   IDS_AUTODIAL },
    { SettingsApp_t::IdViewServerSettings   ,   IDS_SERVERSETTINGS  },
};

static PHMS_ITEM s_PhoneSettingsMenuItemsWithoutAutoDial[] =
{
    { SettingsApp_t::IdVolumeSettings       ,   IDS_VOLUMESETTINGS },
    { SettingsApp_t::IdRingTones            ,   IDS_RINGTONES_TITLE  },
    { SettingsApp_t::IdViewServerSettings   ,   IDS_SERVERSETTINGS  },
};

static PHMS_ITEM s_UserSettingsMenuItems[] =
{
    { SettingsApp_t::IdWindowsLogon      ,   IDS_WINDOWSLOGON },
    { SettingsApp_t::IdSetPIN            ,   IDS_SETPIN  },
};

HWND SettingsMenu_t::s_HelpMessage = NULL;

inline UINT GetDoNotDisturbString()
{
    return PHGetSetting(phsDoNotDisturb) ? IDS_DISABLEDONOTDISTURB : IDS_DONOTDISTURB;
}

inline UINT GetBlockCallerIdString()
{
    return PHGetSetting(phsBlockCallerId) ? IDS_DISABLECALLERIDBLOCK : IDS_CALLERIDBLOCK;
}

inline UINT GetAutoDialString()
{
    return PHGetSetting(phsAutoDial) ? IDS_DISABLEAUTODIAL : IDS_AUTODIAL;
}


HRESULT
SettingsMenu_t::CreateMenuScreen(
    HWND                    hwndParent,
    SettingsApp_t::ScreenId id,
    HWND* phwnd
    )
{
    DWORD AutoDialRules = 0;
    
    HRESULT hr = S_OK;

    PH_MENU_SCREEN_PARAMETERS MenuScreenParameters = {0};
    MenuScreenParameters.StructSize             = sizeof(MenuScreenParameters);
    MenuScreenParameters.Owner                  = hwndParent;
    MenuScreenParameters.Instance               = GlobalData_t::s_ModuleInstance;
    MenuScreenParameters.Flags                  = VDF_TYPE_MODELESS;
    MenuScreenParameters.NotificationMsg        = WM_SETTINGSMENU_DONE;

    switch (id)
    {
    case SettingsApp_t::IdSettings:
        MenuScreenParameters.pMenuScreenItems   = const_cast<PHMS_ITEM*>(s_MenuItems);
        MenuScreenParameters.ItemCount          = _countof (s_MenuItems);
        MenuScreenParameters.Id                 = PHSETTINGS_SETTINGSDIALOG_SCREEN_ID;

        MenuScreenParameters.pMenuScreenItems[SettingsApp_t::IdDoNotDisturb-1].StringId = GetDoNotDisturbString();
        MenuScreenParameters.pMenuScreenItems[SettingsApp_t::IdCallerIdBlocking-1].StringId = GetBlockCallerIdString();
        break;

    case SettingsApp_t::IdPhoneSettings:
        AutoDialRules = PHGetSetting(phsAutoDialRulesAvailability);
        if (AutoDialRules)
        {
            s_PhoneSettingsMenuItems[AUTODIAL_INDEX].StringId = GetAutoDialString();
            MenuScreenParameters.pMenuScreenItems   = const_cast<PHMS_ITEM*>(s_PhoneSettingsMenuItems);
            MenuScreenParameters.ItemCount          = _countof (s_PhoneSettingsMenuItems);      
        }
        else    // no auto dial rules
        {
            MenuScreenParameters.pMenuScreenItems   = const_cast<PHMS_ITEM*>(s_PhoneSettingsMenuItemsWithoutAutoDial);
            MenuScreenParameters.ItemCount          = _countof (s_PhoneSettingsMenuItemsWithoutAutoDial);      
        }
        MenuScreenParameters.pTitle             = MAKEINTRESOURCE(IDS_PHONESETTINGS_TITLE);
        MenuScreenParameters.Id                 = PHSETTINGS_PHONESETTINGS_SCREEN_ID;
        break;
        
    case SettingsApp_t::IdUserSettings:
        MenuScreenParameters.pMenuScreenItems   = const_cast<PHMS_ITEM*>(s_UserSettingsMenuItems);
        MenuScreenParameters.ItemCount          = _countof (s_UserSettingsMenuItems);      
        MenuScreenParameters.pTitle             = MAKEINTRESOURCE(IDS_USERSETTINGS_TITLE);
        MenuScreenParameters.Id                 = PHSETTINGS_USERSETTINGS_SCREEN_ID;
        break;

    default:
        ASSERT(FALSE);
        return E_FAIL;
    }

    if (! PHMenuScreen(&MenuScreenParameters))
    {
        ASSERT(FALSE);
        return E_FAIL;
    }

    *phwnd = MenuScreenParameters.result.Dialog;
    return S_OK;
}

HRESULT
SettingsMenu_t::OnMenuDone(
    HWND Dialog,
    SettingsApp_t::ScreenId id
    )
{
    UINT NewStringId = 0;

    switch (id)
    {
    case SettingsApp_t::IdDoNotDisturb:
        SettingsBoolean_t::ToggleDoNotDisturb();
        NewStringId = GetDoNotDisturbString();
        break;
        
    case SettingsApp_t::IdCallerIdBlocking:
        SettingsBoolean_t::ToggleCallIdBlocking();
        NewStringId = GetBlockCallerIdString();
        break;

    case SettingsApp_t::IdAutoDial:
        SettingsBoolean_t::ToggleAutoDial();
        NewStringId = GetAutoDialString();
        break;
        
    case SettingsApp_t::IdSettings:
    case SettingsApp_t::IdCallForwarding:
    case SettingsApp_t::IdPhoneSettings:
    case SettingsApp_t::IdUserSettings:
    case SettingsApp_t::IdVolumeSettings:
    case SettingsApp_t::IdRingTones:
    case SettingsApp_t::IdViewServerSettings:
    case SettingsApp_t::IdEditServerSettings:
    case SettingsApp_t::IdWindowsLogon:
    case SettingsApp_t::IdSetPIN:
        return GetSettingsApp()->CreateNewWindow(id);

    default:
        ASSERT(FALSE);
        return E_FAIL;
    }

    if (NewStringId)
    {
        ListBox_t   listbox;
        listbox = GetDlgItem(Dialog, IDC_LISTBOX);

        int Selected = listbox.GetCurSel();
        IVoIPDisplayItem* pItem = listbox.GetItem(Selected);

        if (! pItem)
        {
            ASSERT(FALSE);
            return E_FAIL;
        }

        pItem->SetText( CommonUtilities_t::LoadString(GlobalData_t::s_ModuleInstance, NewStringId) );

        RECT ItemRect = {0};
        listbox.GetItemRect(Selected, &ItemRect);

        InvalidateRect(listbox, &ItemRect, FALSE);
    }

    return S_OK;
}

HRESULT
SettingsMenu_t::OnHelp(
    HWND        hwndParent
    )
{
    CleanupHelpScreen();

    PH_MESSAGE_BOX_PARAMETERS   Params = {0};
    Params.StructSize = sizeof(Params);
    Params.Flags      = VDF_TYPE_MODELESS;
    Params.IconId     = IDB_HELP_ICON;
    Params.Instance   = GlobalData_t::s_ModuleInstance;
    Params.Owner      = hwndParent;
    Params.MenuId     = IDMB_MSGBOX_HELP;
    Params.pText      = CommonUtilities_t::LoadString(GlobalData_t::s_ModuleInstance, IDS_SCREENHELP_DEFAULT);
    Params.pTitle     = CommonUtilities_t::LoadString(GlobalData_t::s_ModuleInstance, IDS_TITLE_HELP);

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

    s_HelpMessage = Params.result.Dialog;
    return S_OK;
}

void
SettingsMenu_t::CleanupHelpScreen(
    void
    )
{
    if (s_HelpMessage)
    {
        DestroyWindow(s_HelpMessage);
        s_HelpMessage = NULL;
    }
}

⌨️ 快捷键说明

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