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
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, ¬Used),
|
|
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;
|
|
}
|