📄 settingsmenu.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 + -