PHBKDLG.C

// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright 1993 - 1998 Microsoft Corporation. All Rights Reserved.
//
// MODULE: phbkdlg.c
//
// PURPOSE: Displays the "Phonebox Entries" dialog box
//
// FUNCTIONS:
// PhbkDlg - Processes messages for "PhbkDlg" dialog box.
// MsgPhbkDlgInit - To initialize the phbkdlg box with version info
// from resources.
// MsgPhbkDlgCommand - Process WM_COMMAND message sent to the phbkdlg box.
// CmdPhbkDlgCancel - Free the phbkdlg box and related data.
// CmdPhbkDlgEntry - Process LBN_DBLCLK for the entry list box
// CmdPhbkDlgDial - Calls AUTHDLG and/or DIALDLG boxes.
//
// COMMENTS:
// Displays and allow user to dial an entry from the default phonebook
//
//

#include <windows.h> // required for all Windows applications
#include <windowsx.h>
#ifdef WIN16
#include "win16ext.h" // required only for win16 applications
#endif
#include "globals.h" // prototypes specific to this application
#include <malloc.h>
#include <ras.h>
#include <raserror.h>
#include "phbkdlg.h"
#include "dialdlg.h"
#include "authdlg.h"

LRESULT MsgPhbkDlgInit(HWND, UINT, WPARAM, LPARAM);
LRESULT MsgPhbkDlgCommand(HWND, UINT, WPARAM, LPARAM);
LRESULT CmdPhbkDlgCancel(HWND, WORD, WORD, HWND);
LRESULT CmdPhbkDlgEntry(HWND, WORD, WORD, HWND);
LRESULT CmdPhbkDlgDial(HWND, WORD, WORD, HWND);


// PhbkDlg dialog message table definition.
MSD rgmsdPhbkDlg[] =
{
{WM_COMMAND, MsgPhbkDlgCommand},
{WM_INITDIALOG, MsgPhbkDlgInit}
};

MSDI msdiPhbkDlg =
{
sizeof(rgmsdPhbkDlg) / sizeof(MSD),
rgmsdPhbkDlg,
edwpNone
};

// PhbkDlg dialog command table definition.
CMD rgcmdPhbkDlg[] =
{
{IDB_DIAL, CmdPhbkDlgDial},
{IDCANCEL, CmdPhbkDlgCancel},
{IDL_ENTRY, CmdPhbkDlgEntry}
};

CMDI cmdiPhbkDlg =
{
sizeof(rgcmdPhbkDlg) / sizeof(CMD),
rgcmdPhbkDlg,
edwpNone
};

// Module specific "globals" Used when a variable needs to be
// accessed in more than on handler function.

#ifdef WIN16 // for Win16 we require that the user
BOOL g_bUseCurrent = FALSE; // always enters username and password
#else
BOOL g_bUseCurrent = TRUE;
#endif

//
// FUNCTION: PhbkDlg(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for "PhbkDlg" dialog box.
//
// PARAMETERS:
// hdlg - window handle of the dialog box
// wMessage - type of message
// wparam - message-specific information
// lparam - message-specific information
//
// RETURN VALUE:
// TRUE - message handled
// FALSE - message not handled
//
// COMMENTS:
// Dispatches messages for dialog box
//

LRESULT CALLBACK PhbkDlg(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
{
return DispMessage(&msdiPhbkDlg, hdlg, uMessage, wparam, lparam);
}


//
// FUNCTION: MsgPhbkDlgInit(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: To initialize the phbkdlg box.
//
// PARAMETERS:
// hwnd - The window handing the message.
// uMessage - The message number. WM_INITDIALOG.
// wparam - Message specific data (unused).
// lparam - Message specific data (unused).
//
// RETURN VALUE:
// Always returns TRUE - message handled.
//
// COMMENTS:
// Displays default phone book by calling RasEnumEntries
//

LRESULT MsgPhbkDlgInit(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
{
LPRASENTRYNAME lpRasEntry;
LPRASENTRYNAME lpTemp;
DWORD cbBuf;
DWORD cEntry;
DWORD dwRet;
UINT ndx;
char szMessage[256];

cbBuf = sizeof(RASENTRYNAME);
if ((lpRasEntry = ( LPRASENTRYNAME ) _fmalloc((UINT)cbBuf)) != NULL )
{
lpRasEntry->dwSize = sizeof(RASENTRYNAME);
dwRet = RasEnumEntries( NULL, NULL, lpRasEntry, &cbBuf, &cEntry );
if ( dwRet == ERROR_BUFFER_TOO_SMALL )
{
if ((lpTemp = ( LPRASENTRYNAME ) _frealloc ( lpRasEntry, (UINT)cbBuf )) != NULL )
{
lpRasEntry = lpTemp;
dwRet = RasEnumEntries( NULL, NULL, lpRasEntry, &cbBuf, &cEntry );
}
else
{
dwRet = ERROR_NOT_ENOUGH_MEMORY;
}
}
else if ( dwRet != 0 ) // other error
{
if ( RasGetErrorString( (UINT)dwRet, szMessage, 256 ) != 0 )
wsprintf( (LPSTR)szMessage, "Undefined RasEnumEntries Error." );

MessageBox(hdlg, (LPSTR)szMessage, szAppName, MB_OK | MB_ICONSTOP );
}

if ( dwRet == 0 ) // No errors
{
for ( ndx = 0; ndx < cEntry; ndx++ )
SendDlgItemMessage( hdlg,
IDL_ENTRY,
LB_ADDSTRING,
0,
(LPARAM)(LPCSTR) lpRasEntry[ndx].szEntryName);

if ( ndx > 0 ) // at least one item was added
{
SendDlgItemMessage( hdlg, IDL_ENTRY, LB_SETCURSEL, 0, 1L );
EnableWindow( GetDlgItem( hdlg, IDB_DIAL ), TRUE );
}
}

_ffree( lpRasEntry );
}

#ifdef WIN16
// for Win16, we require that the user enters their username
ShowWindow( GetDlgItem( hdlg, IDC_USECURRENT ), SW_HIDE );
#endif

CheckDlgButton( hdlg, IDC_USECURRENT, g_bUseCurrent );

// Center the dialog over the application window
CenterWindow(hdlg, GetWindow(hdlg, GW_OWNER));

return TRUE;
}

//
// FUNCTION: MsgPhbkDlgCommand(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Process WM_COMMAND message sent to the phbkdlg box.
//
// PARAMETERS:
// hwnd - The window handing the message.
// uMessage - The message number. WM_COMMAND.
// wparam - Message specific data (unused).
// lparam - Message specific data (unused).
//
// RETURN VALUE:
// TRUE for message handled
// FALSE for message not handled
//
// COMMENTS:
// Uses this DispCommand function defined in wndproc.c combined
// with the cmdiPhbkDlg structure defined in this file to handle
// the command messages for the phbkdlg dialog box.
//

LRESULT MsgPhbkDlgCommand(HWND hwnd,
UINT uMessage,
WPARAM wparam,
LPARAM lparam)
{
return DispCommand(&cmdiPhbkDlg, hwnd, wparam, lparam);
}

//
// FUNCTION: CmdPhbkDlgCancel(HWND, WORD, WORD, HWND)
//
// PURPOSE: Free the phbkdlg box and related data.
//
// PARAMETERS:
// hwnd - The window handling the command.
// wCommand - The command to be handled IDCANCEL.
// wNotify - The notification code to be handled (unused).
// hwndCtrl - NULL (unused).
//
// RETURN VALUE:
// Always returns TRUE.
//
// COMMENTS:
// Calls EndDialog to finish the dialog session.
//

LRESULT CmdPhbkDlgCancel(HWND hdlg, WORD wCommand, WORD wNotify, HWND hwndCtrl)
{
// save the state of the check box
g_bUseCurrent = IsDlgButtonChecked( hdlg, IDC_USECURRENT );
EndDialog(hdlg, FALSE); // Exit the dialog
return TRUE;
}


//
// FUNCTION: CmdPhbkDlgEntry(HWND, WORD, WORD, HWND)
//
// PURPOSE: Dial selected phonebook phbkdlg
//
// PARAMETERS:
// hwnd - The window handling the command.
// wCommand - The command to be handled IDL_ENTRY.
// wNotify - The notification code to be handled LBN_DBLCLK.
// hwndCtrl - NULL (unused).
//
// RETURN VALUE:
// TRUE if message is processed.
//
// COMMENTS:
// Double click on an entry signifies a dial command.
//

LRESULT CmdPhbkDlgEntry(HWND hdlg, WORD wCommand, WORD wNotify, HWND hwndCtrl)
{
if ( wNotify == LBN_DBLCLK )
{
SendMessage( hdlg, WM_COMMAND, IDB_DIAL, 0 );
return TRUE;
}
return FALSE;
}

//
// FUNCTION: CmdPhbkDialDlg(HWND, WORD, WORD, HWND)
//
// PURPOSE: Displays the "DialDlg" dialog box
//
// PARAMETERS:
// hdlg - Window handle
// wCommand - IDB_DIAL(unused)
// wNotify - Notification number (unused)
// hwndCtrl - NULL (unused)
//
// RETURN VALUE:
//
// Always returns TRUE - Message handled
//
// COMMENTS:
// Calls authentication and dialing dialog boxes
//

LRESULT CmdPhbkDlgDial(HWND hdlg, WORD wCommand, WORD wNotify, HWND hwndCtrl)
{
g_bUseCurrent = IsDlgButtonChecked( hdlg, IDC_USECURRENT );

// short circut evaluation will cause the AuthDlg box not to be
// displayed if g_bUseCurrent is true
if ( g_bUseCurrent || DialogBox(hInst, "AuthDlgBox", hdlg, (DLGPROC)AuthDlg) )
{
if( DialogBox(hInst, "DialDlgBox", hdlg, (DLGPROC)DialDlg))
EndDialog(hdlg, TRUE); // Exit Phonebook dialog
// if connection established
}
return TRUE;
}