windows-nt/Source/XPSP1/NT/shell/cpls/main/util.c
2020-09-26 16:20:57 +08:00

239 lines
5 KiB
C

/*++
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);
}