📄 settingsapp.cpp
字号:
}
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 + -