windows-nt/Source/XPSP1/NT/net/homenet/beacon/client/properties.cpp
2020-09-26 16:20:57 +08:00

128 lines
3.2 KiB
C++

#include "properties.h"
#include "util.h"
static const TCHAR c_szSharedAccessClientKeyPathDownlevel[] = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ICSClient");
static const TCHAR c_szShowIcon[] = TEXT("ShowIcon");
CPropertiesDialog::CPropertiesDialog(IInternetGateway* pInternetGateway)
{
m_hIcon = NULL;
m_pInternetGateway = pInternetGateway;
m_pInternetGateway->AddRef();
}
CPropertiesDialog::~CPropertiesDialog()
{
m_pInternetGateway->Release();
}
LRESULT CPropertiesDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
HRESULT hr = S_OK;
// load the little icon, this can not be done in the rc file, it stretches the icon
int cx = GetSystemMetrics(SM_CXSMICON);
int cy = GetSystemMetrics(SM_CYSMICON);
m_hIcon = reinterpret_cast<HICON>(LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_GATEWAY), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR));
if(NULL != m_hIcon)
{
SendDlgItemMessage(IDC_PROPERTIES_ADAPTERICON, STM_SETICON, reinterpret_cast<WPARAM>(m_hIcon), 0);
}
// set the text with the connection name
LPTSTR pszConnectionName;
hr = GetConnectionName(m_pInternetGateway, &pszConnectionName);
if(SUCCEEDED(hr))
{
SetDlgItemText(IDC_PROPERTIES_ADAPTERNAME, pszConnectionName);
LocalFree(pszConnectionName);
}
// check the show icon checkbox
if(SUCCEEDED(ShouldShowIcon()))
{
CheckDlgButton(IDC_PROPERTIES_SHOWICON, BST_CHECKED);
}
return 0;
}
LRESULT CPropertiesDialog::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if(NULL != m_hIcon)
{
DestroyIcon(m_hIcon);
}
return 0;
}
LRESULT CPropertiesDialog::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
NMHDR* pNotifyHeader = reinterpret_cast<NMHDR*>(lParam);
if(PSN_APPLY == pNotifyHeader->code)
{
SetShowIcon(BST_CHECKED == IsDlgButtonChecked(IDC_PROPERTIES_SHOWICON));
}
return 0;
}
HRESULT CPropertiesDialog::ShouldShowIcon(void)
{
HRESULT hr = S_OK;
HKEY hKey;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szSharedAccessClientKeyPathDownlevel, NULL, KEY_QUERY_VALUE, &hKey))
{
DWORD dwType;
DWORD dwValue;
DWORD dwSize = sizeof(dwValue);
if(ERROR_SUCCESS == RegQueryValueEx(hKey, c_szShowIcon, NULL, &dwType, reinterpret_cast<LPBYTE>(&dwValue), &dwSize))
{
if(REG_DWORD == dwType && 0 == dwValue)
{
hr = E_FAIL;
}
}
RegCloseKey(hKey);
}
return hr;
}
HRESULT CPropertiesDialog::SetShowIcon(BOOL bShowIcon)
{
HRESULT hr = S_OK;
HKEY hKey;
if(ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, c_szSharedAccessClientKeyPathDownlevel, NULL, TEXT(""), 0, KEY_SET_VALUE, NULL, &hKey, NULL))
{
DWORD dwValue = bShowIcon;
if(ERROR_SUCCESS == RegSetValueEx(hKey, c_szShowIcon, NULL, REG_DWORD, reinterpret_cast<LPBYTE>(&dwValue), sizeof(dwValue)))
{
hr = S_OK;
}
else
{
hr = E_FAIL;
}
RegCloseKey(hKey);
}
else
{
hr = E_FAIL;
}
return hr;
}