STATDLG.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: statdlg.c
//
// PURPOSE: Displays the "StatDlg" dialog box
//
// FUNCTIONS:
// StatDlg - Processes messages for "StatDlg" dialog box.
// MsgStatDlgInit - To initialize the statdlg box.
// MsgStatDlgCommand - Process WM_COMMAND message sent to the statdlg box.
// CmdStatDlgRefresh - Display the connection status.
// CmdStatDlgOK - Free the statdlg box and related data.
//
// COMMENTS:
// Dialog box to display the status of the selected connection
//

#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 <stdlib.h>
#include <ras.h>
#include <raserror.h>
#include "rasutil.h"
#include "statdlg.h"

LRESULT MsgStatDlgInit(HWND, UINT, WPARAM, LPARAM);
LRESULT MsgStatDlgCommand(HWND, UINT, WPARAM, LPARAM);
LRESULT CmdStatDlgRefresh(HWND, WORD, WORD, HWND);
LRESULT CmdStatDlgOK(HWND, WORD, WORD, HWND);

// StatDlg dialog message table definition.
MSD rgmsdStatDlg[] =
{
{WM_COMMAND, MsgStatDlgCommand},
{WM_INITDIALOG, MsgStatDlgInit}
};

MSDI msdiStatDlg =
{
sizeof(rgmsdStatDlg) / sizeof(MSD),
rgmsdStatDlg,
edwpNone
};

// StatDlg dialog command table definition.
CMD rgcmdStatDlg[] =
{
{IDB_REFRESH, CmdStatDlgRefresh},
{IDOK, CmdStatDlgOK}
};

CMDI cmdiStatDlg =
{
sizeof(rgcmdStatDlg) / sizeof(CMD),
rgcmdStatDlg,
edwpNone
};

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


//
// FUNCTION: StatDlg(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for "StatDlg" 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:
// Dispatch messages
//

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


//
// FUNCTION: MsgStatDlgInit(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: To initialize the statdlg box.
//
// PARAMETERS:
// hwnd - The window handing the message.
// uMessage - The message number. WM_INITDLG.
// wparam - Message specific data (unused).
// lparam - Message specific data (unused).
//
// RETURN VALUE:
// Always returns 0 - message handled.
//
// COMMENTS:
//

LRESULT MsgStatDlgInit(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
{
// Center the dialog over the application window
CenterWindow(hdlg, GetWindow(hdlg, GW_OWNER));

SendMessage(hdlg, WM_COMMAND, (WPARAM) IDB_REFRESH, 0L );

return TRUE;
}

//
// FUNCTION: MsgStatDlgCommand(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Process WM_COMMAND message sent to the statdlg 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 cmdiStatDlg structure defined in this file to handle
// the command messages for the statdlg dialog box.
//

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

//
// FUNCTION: CmdStatDlgRefresh(HWND, WORD, WORD, HWND)
//
// PURPOSE: Refresh the information displayed in the dialog box.
//
// PARAMETERS:
// hwnd - The window handling the command.
// wCommand - The command to be handled IDB_REFRESH.
// wNotify - The notifcation message (unused).
// hwndCtrl - NULL (unused).
//
// RETURN VALUE:
// Always returns TRUE.
//
// COMMENTS:
// Calls RasGetConnectStatus to populate dialog box.
//

LRESULT CmdStatDlgRefresh(HWND hdlg, WORD wCommand, WORD wNotify, HWND hwndCtrl)
{
HRASCONN hrasconn;
RASCONNSTATUS rasStatus;
DWORD dwRet;
CHAR szBuf[256];
HWND hwndConn;
UINT ndx;

// get the connection text from previous window
hwndConn = GetDlgItem( GetParent(hdlg), IDL_CONN);
ndx = (UINT) SendMessage( hwndConn, LB_GETCURSEL, 0, 0L );
SendMessage( hwndConn, LB_GETTEXT, ndx, (LPARAM)(LPSTR)szBuf );
SetDlgItemText(hdlg, IDE_CONNECTION, (LPSTR)szBuf );

// get to HRASCONN
hrasconn = g_lphRasConn[ndx];

// get connection status
rasStatus.dwSize = sizeof(RASCONNSTATUS);
dwRet = RasGetConnectStatus( hrasconn, &rasStatus );
if ( dwRet )
{
if ( RasGetErrorString( (UINT)dwRet, (LPSTR)szBuf, 256 ) != 0 )
wsprintf( (LPSTR)szBuf, "Undefined RAS Connect Status Error (%ld).", dwRet );

MessageBox(hdlg, (LPSTR)szBuf, szAppName, MB_OK | MB_ICONSTOP );
EndDialog(hdlg, FALSE);
return TRUE;
}
else
{
LoadString( hInst,
GetRasConnState( rasStatus.rasconnstate ),
(LPSTR)szBuf,
256 );
SetDlgItemText(hdlg, IDE_STATUS, (LPSTR)szBuf);

if ( rasStatus.dwError ) // there is an error
{
if ( RasGetErrorString( (UINT)rasStatus.dwError, (LPSTR)szBuf, 256 ) != 0 )
wsprintf( (LPSTR)szBuf, "Undefined Connection Error (%ld).", rasStatus.dwError );
}
else
{
wsprintf( (LPSTR)szBuf, "No Error" );
}
SetDlgItemText(hdlg, IDE_ERROR, (LPSTR)szBuf);

SetDlgItemText(hdlg, IDE_DEVICE, rasStatus.szDeviceName);

SetDlgItemText(hdlg, IDE_TYPE, rasStatus.szDeviceType);

}

return TRUE;
}

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

LRESULT CmdStatDlgOK(HWND hdlg, WORD wCommand, WORD wNotify, HWND hwndCtrl)
{
EndDialog(hdlg, TRUE); // Exit the dialog
return TRUE;
}