|
|
/*++
Copyright (c) 1994-1998, Microsoft Corporation All rights reserved.
Module Name:
util.c
Abstract:
This module contains the utility routines for this project.
Revision History:
--*/
//
// Include Files.
//
#include "main.h"
#include "util.h"
#include "rc.h"
//
// From shell\inc\shsemip.h
//
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
//
// Global Variables.
//
extern HINSTANCE g_hInst;
////////////////////////////////////////////////////////////////////////////
//
// HourGlass
//
////////////////////////////////////////////////////////////////////////////
void HourGlass( BOOL fOn) { if (!GetSystemMetrics(SM_MOUSEPRESENT)) { ShowCursor(fOn); } SetCursor(LoadCursor(NULL, (fOn ? IDC_WAIT : IDC_ARROW))); }
////////////////////////////////////////////////////////////////////////////
//
// MyMessageBox
//
////////////////////////////////////////////////////////////////////////////
#ifdef WINNT
int MyMessageBox( HWND hWnd, UINT uText, UINT uCaption, UINT uType, ...) { TCHAR szText[4 * PATHMAX], szCaption[2 * PATHMAX]; int result; va_list parg;
va_start(parg, uType);
LoadString(g_hInst, uText, szCaption, ARRAYSIZE(szCaption));
wvsprintf(szText, szCaption, parg);
LoadString(g_hInst, uCaption, szCaption, ARRAYSIZE(szCaption));
result = MessageBox(hWnd, szText, szCaption, uType);
va_end(parg);
return (result); }
#else
int MyMessageBox( HWND hWnd, UINT uText, UINT uCaption, UINT uType, ...) { TCHAR szText[256 + PATHMAX], szCaption[256]; int result;
LoadString(g_hInst, uText, szCaption, ARRAYSIZE(szCaption));
wvsprintf(szText, szCaption, (LPTSTR)(&uType + 1));
LoadString(g_hInst, uCaption, szCaption, ARRAYSIZE(szCaption));
result = MessageBox(hWnd, szText, szCaption, uType);
return (result); }
#endif
////////////////////////////////////////////////////////////////////////////
//
// TrackInit
//
////////////////////////////////////////////////////////////////////////////
void TrackInit( HWND hwndScroll, int nCurrent, PARROWVSCROLL pAVS) { SendMessage(hwndScroll, TBM_SETRANGE, 0, MAKELONG(pAVS->bottom, pAVS->top)); SendMessage(hwndScroll, TBM_SETPOS, TRUE, (LONG)nCurrent); }
////////////////////////////////////////////////////////////////////////////
//
// TrackMessage
//
////////////////////////////////////////////////////////////////////////////
int TrackMessage( WPARAM wParam, LPARAM lParam, PARROWVSCROLL pAVS) { return ((int)SendMessage((HWND)lParam, TBM_GETPOS, 0, 0L)); }
////////////////////////////////////////////////////////////////////////////
//
// HardwareDlg_OnInitDialog
//
// Load the real hardware tab out of devmgr.dll.
//
// DWLP_USER - HWND of inner page
//
////////////////////////////////////////////////////////////////////////////
// There is no devmgr.h (go figure) so we must declare it ourselves.
EXTERN_C DECLSPEC_IMPORT HWND STDAPICALLTYPE DeviceCreateHardwarePage(HWND hwndParent, const GUID *pguid);
void HardwareDlg_OnInitDialog(HWND hdlg, LPARAM lp) { PCHWPAGEINFO phpi = (PCHWPAGEINFO)((LPPROPSHEETPAGE)lp)->lParam; HWND hwndHW = DeviceCreateHardwarePage(hdlg, &phpi->guidClass);
if (hwndHW) { TCHAR tszTshoot[MAX_PATH]; SetWindowLongPtr(hdlg, DWLP_USER, (LONG_PTR)hwndHW); if (LoadString(g_hInst, phpi->idsTshoot, tszTshoot, ARRAYSIZE(tszTshoot))) { SetWindowText(hwndHW, tszTshoot); } } else { DestroyWindow(hdlg); // catastrophic failure
} }
////////////////////////////////////////////////////////////////////////////
//
// HardwareDlg
//
// The dialog procedure for generic hardware tabs.
//
// GWLP_USERDATA - HINSTANCE of devmgr.dll
// DWLP_USER - HWND of inner page
//
//
////////////////////////////////////////////////////////////////////////////
typedef HWND (WINAPI *DEVICECREATEHARDWAREPAGE) (HWND hwndParent, const GUID *pguid);
INT_PTR CALLBACK HardwareDlg(HWND hdlg, UINT uMsg, WPARAM wp, LPARAM lp) { switch (uMsg) {
case WM_INITDIALOG: HardwareDlg_OnInitDialog(hdlg, lp); return TRUE; } return FALSE; }
////////////////////////////////////////////////////////////////////////////
//
// CreateHardwarePage
//
////////////////////////////////////////////////////////////////////////////
HPROPSHEETPAGE CreateHardwarePage(PCHWPAGEINFO phpi) { PROPSHEETPAGE psp;
// No hardware tab if we are a remote TS session, since we would end
// up showing the properties of the server, not the client, and that
// would be too confusing.
if (GetSystemMetrics(SM_REMOTESESSION)) return NULL;
// No hardware tab if it's been disabled via policy.
if (SHRestricted(REST_NOHARDWARETAB)) return NULL;
psp.dwSize = sizeof(psp); psp.dwFlags = PSP_DEFAULT; psp.hInstance = g_hInst; psp.pszTemplate = MAKEINTRESOURCE(DLG_HARDWARE); psp.pfnDlgProc = HardwareDlg; psp.lParam = (LPARAM)phpi;
return CreatePropertySheetPage(&psp); }
|