Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

265 lines
6.8 KiB

/*++
Copyright (c) 1995-1996 Microsoft Corporation
Module Name:
dlgproc
Abstract:
The dialog procedures for the different tabs in the main dialog.
Author:
Steve Firebaugh (stevefir) 31-Dec-1995
Revision History:
--*/
#include <windows.h>
#include <commdlg.h>
#include <winsock2.h>
#include <nspapi.h>
#include "globals.h"
//
// Keep a dirty bit for the ordering of the service providers. Set it if
// the order changes, clear it if we push apply.
//
int gDirty = FALSE;
INT_PTR CALLBACK SortDlgProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM ppsp)
/*++
This is the main dialog proc for the window that lists all of the service
providers and lets the user push them up and down.
Uses GLOBAL: gNumRows
--*/
{
int iSelection;
switch (message) {
case WM_INITDIALOG:
CatReadRegistry (hwnd);
SendMessage (GetDlgItem (hwnd, DID_LISTCTL), LB_SETCURSEL, 0, 0);
return FALSE;
break;
case WM_NOTIFY: {
NMHDR * pnmhdr;
pnmhdr = (NMHDR *) ppsp;
if (pnmhdr->code == PSN_APPLY) {
if (gDirty)
if ( IDYES == MessageBox (hwnd,
TEXT("This operation may change the behavior of the networking components on your system.\nDo you wish to continue?"),
TEXT("Warning:"),
MB_ICONWARNING | MB_YESNO)) {
CatDoWriteEntries (hwnd);
gDirty = FALSE;
}
}
} break;
case WM_COMMAND:
switch (LOWORD (wParam)) {
//
// On the up & down buttons, screen out the no-ops (up on top row,
// or down on bottom), reorder the catalog entries, and set the
// dirty bit.
//
case DID_UP: {
iSelection = (int)SendMessage (HWNDLISTCTL, LB_GETCURSEL, 0, 0);
if (iSelection == 0) return FALSE;
CatDoUpDown (hwnd, LOWORD (wParam));
SendMessage (GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0);
gDirty = TRUE;
} break;
case DID_DOWN: {
iSelection = (int)SendMessage (HWNDLISTCTL, LB_GETCURSEL, 0, 0);
if (iSelection == (gNumRows-1)) return FALSE;
CatDoUpDown (hwnd, LOWORD (wParam));
SendMessage (GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0);
gDirty = TRUE;
} break;
//
// If the listbox is double clicked, re-send the message as if it
// was a more-info button press. If it is a selection change, then
// set the state of the buttons appropriately.
//
case DID_LISTCTL:
if (HIWORD (wParam) == LBN_DBLCLK)
SendMessage (hwnd, WM_COMMAND, DID_MORE, 0);
else if (HIWORD (wParam) == LBN_SELCHANGE) {
// here we can enable/disable buttons...
// not implemented yet
}
break;
//
// If they request more information, figure out which item is selected,
// then map that to an index value from the initial ordering. Finally
// popup a dialog that will show the information from the catalog at
// that index.
//
case DID_MORE: {
int iIndex;
int notUsed;
TCHAR szBuffer[MAX_STR];
iSelection = (int)SendMessage (HWNDLISTCTL, LB_GETCURSEL, 0, 0);
if (iSelection != LB_ERR) {
//
// Dig the chosen string out of the listbox, find the original
// index hidden in it, and popup the more information dialog
// for the appropriate entry.
//
SendMessage (HWNDLISTCTL, LB_GETTEXT, iSelection, (LPARAM) szBuffer);
ASSERT (CatGetIndex (szBuffer, &iIndex, &notUsed),
TEXT("SortDlgProc, CatGetIndex failed."));
DialogBoxParam (ghInst,
TEXT("MoreInfoDlg"),
hwnd,
MoreInfoDlgProc,
iIndex);
}
} break;
}
break; // WM_COMMAND
} // end switch
return FALSE;
}
INT_PTR CALLBACK MoreInfoDlgProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
/*++
This is the window proc for the simple "more info" dialog. All that we
do here is fill our listbox with interesting info on wm_initdialog, and
then wait to be dismissed.
--*/
{
switch (message) {
case WM_INITDIALOG:
CatDoMoreInfo (hwnd, (int) lParam);
break;
case WM_COMMAND:
if (wParam == IDCANCEL)
EndDialog (hwnd, FALSE);
if (wParam == IDOK)
EndDialog (hwnd, TRUE);
break;
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
EndDialog (hwnd, TRUE);
break;
} // end switch
return FALSE;
}
INT_PTR CALLBACK RNRDlgProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
/*++
For this version, simply list the installed providers.
--*/
{
switch (message) {
case WM_INITDIALOG: {
//
// at init time, query all of the installed name space providers
// and put their identifier in the listbox. Notice. that this
// function assumes WSAStartup has already been called.
//
#define MAX_NAMESPACE 100 // hack, arbitrary value, should be dynamic
WSANAMESPACE_INFO arnspBuf[MAX_NAMESPACE];
DWORD dwBufLen;
int i, r;
int iTab = 50;
SendMessage (HWNDLISTCTL, LB_SETTABSTOPS, 1, (LPARAM) &iTab);
//
// Call the WinSock2 name space enumeration function with enough
// free space such that we expect to get all of the information.
//
dwBufLen = sizeof (arnspBuf);
r = WSAEnumNameSpaceProviders(&dwBufLen, arnspBuf);
if ( r == SOCKET_ERROR) {
DBGOUT((TEXT("WSAEnumNameSpaceProviders failed w/ %d\n"), WSAGetLastError()));
return (INT_PTR)-1;
}
//
// WSAEnumNameSpaceProviders succeeded so write results to listbox
//
for (i = 0; i< r; i++) {
ADDSTRING(arnspBuf[i].lpszIdentifier);
}
} break;
} // end switch
return FALSE;
}