windows-nt/Source/XPSP1/NT/com/mobile/syncmgr/dll/rasui.cpp
2020-09-26 16:20:57 +08:00

298 lines
6.9 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: rasui.cpp
//
// Contents: helper functions for showing Ras UI
//
// Classes:
//
// Notes:
//
// History: 08-Dec-97 rogerg Created.
//
//--------------------------------------------------------------------------
#include "precomp.h"
extern TCHAR szSyncMgrHelp[];
extern ULONG g_aContextHelpIds[];
extern HINSTANCE g_hmodThisDll;
//+---------------------------------------------------------------------------
//
// Member: CRasUI::CRasUI, public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
// History: 08-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
CRasUI::CRasUI()
{
m_pNetApi = NULL;
m_cEntries = 0;
m_lprasentry = 0;
}
//+---------------------------------------------------------------------------
//
// Member: CRasUI::~CRasUI, public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
// History: 08-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
CRasUI::~CRasUI()
{
// clear out any cached enum
m_cEntries = 0; // make sure on error our enum cash is reset.
if (m_lprasentry)
{
FREE(m_lprasentry);
m_lprasentry = NULL;
}
m_pNetApi->Release();
}
//+---------------------------------------------------------------------------
//
// Member: CRasUI::Initialize, public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
// History: 08-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
BOOL CRasUI::Initialize()
{
if (NOERROR != MobsyncGetClassObject(MOBSYNC_CLASSOBJECTID_NETAPI,
(void **) &m_pNetApi))
{
m_pNetApi = NULL;
}
return TRUE; // always return true, let other ras calls fail since need
// to handle LAN.
}
//+---------------------------------------------------------------------------
//
// Member: CRasUI::IsConnectionLan, public
//
// Synopsis:
//
// Arguments:
//
// Returns:
//
// Modifies:
//
// History: 08-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
BOOL CRasUI::IsConnectionLan(int iConnectionNum)
{
// ui always puts the LAN connection as the first item
// Need to add logic to get if truly lan if add support
// for multiple LAN cards and/or not show if no LAN
// card.
if (iConnectionNum ==0)
{
return TRUE;
}
else
{
return FALSE;
}
}
//+---------------------------------------------------------------------------
//
// Member: CRasUI::FillRasCombo, public
//
// Synopsis:
//
// Arguments: hwndCtrl - Combo Ctrl to fill items with
// fForceEnum - reenum rasphonebook instead of using cache
// fShowRasEntries - true if should include ras entries
// in combo, if false, only LAN Connection is shown.
//
// Returns:
//
// Modifies:
//
// History: 08-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
void CRasUI::FillRasCombo(HWND hwndCtl,BOOL fForceEnum,BOOL fShowRasEntries)
{
DWORD dwSize;
DWORD dwError;
COMBOBOXEXITEM comboItem;
DWORD cEntryIndex;
int iItem = 0;
HIMAGELIST himage;
HICON hIcon;
TCHAR szBuf[MAX_PATH + 1];
UINT ImageListflags;
ImageListflags = ILC_COLOR | ILC_MASK;
if (IsHwndRightToLeft(hwndCtl))
{
ImageListflags |= ILC_MIRROR;
}
himage = ImageList_Create(16,16,ImageListflags ,5,20);
if (himage)
{
SendMessage(hwndCtl,CBEM_SETIMAGELIST,0,(LPARAM) himage);
}
if (LoadString(g_hmodThisDll, IDS_LAN_CONNECTION, szBuf, MAX_PATH))
{
hIcon = LoadIcon(g_hmodThisDll,MAKEINTRESOURCE(IDI_LANCONNECTION));
comboItem.iImage = ImageList_AddIcon(himage,hIcon);
comboItem.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_LPARAM | CBEIF_INDENT
| CBEIF_SELECTEDIMAGE;
comboItem.iItem = iItem;
comboItem.pszText = szBuf;
comboItem.cchTextMax = lstrlen(szBuf) + 1;
comboItem.iIndent = 0;
comboItem.iSelectedImage = comboItem.iImage;
comboItem.lParam = SYNCSCHEDINFO_FLAGS_CONNECTION_LAN;
iItem = ComboEx_InsertItem(hwndCtl,&comboItem);
++iItem;
}
dwError = 0; // if dont' show ras there are now errors
if (fShowRasEntries)
{
// if we are forced to reenum the Rasconnections then free any existing cache
if (fForceEnum)
{
m_cEntries = 0;
if (m_lprasentry)
{
FREE(m_lprasentry);
m_lprasentry = NULL;
}
}
// if RAS couldn't be loaded, just have LAN connection.
if (NULL == m_lprasentry) // if don't already have an enum cached then enum now.
{
dwSize = sizeof(RASENTRYNAME);
m_lprasentry = (LPRASENTRYNAME) ALLOC(dwSize);
if(!m_lprasentry)
goto error;
m_lprasentry->dwSize = sizeof(RASENTRYNAME);
m_cEntries = 0;
dwError = m_pNetApi->RasEnumEntries(NULL, NULL,
m_lprasentry, &dwSize, &m_cEntries);
if (dwError == ERROR_BUFFER_TOO_SMALL)
{
FREE(m_lprasentry);
m_lprasentry = (LPRASENTRYNAME) ALLOC(dwSize);
if(!m_lprasentry)
goto error;
m_lprasentry->dwSize = sizeof(RASENTRYNAME);
m_cEntries = 0;
dwError = m_pNetApi->RasEnumEntries(NULL, NULL,
m_lprasentry, &dwSize, &m_cEntries);
Assert(0 == dwError);
}
if (dwError)
goto error;
}
cEntryIndex = m_cEntries;
comboItem.mask = CBEIF_DI_SETITEM | CBEIF_TEXT | CBEIF_IMAGE | CBEIF_LPARAM | CBEIF_INDENT
| CBEIF_SELECTEDIMAGE ;
hIcon = LoadIcon(g_hmodThisDll,MAKEINTRESOURCE(IDI_RASCONNECTION));
comboItem.iImage = ImageList_AddIcon(himage,hIcon);
comboItem.iItem = iItem;
comboItem.iIndent = 0;
comboItem.iSelectedImage = comboItem.iImage;
comboItem.lParam = SYNCSCHEDINFO_FLAGS_CONNECTION_WAN;
while(cEntryIndex)
{
comboItem.pszText = m_lprasentry[cEntryIndex-1].szEntryName;
iItem = ComboEx_InsertItem(hwndCtl,&comboItem);
cEntryIndex--;
}
}
error:
SendMessage(hwndCtl, CB_SETCURSEL,0, 0);
if (dwError)
{
m_cEntries = 0; // make sure on error our enum cash is reset.
if (m_lprasentry)
{
FREE(m_lprasentry);
m_lprasentry = NULL;
}
}
}