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.
210 lines
4.8 KiB
210 lines
4.8 KiB
/*++
|
|
|
|
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
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
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));
|
|
|
|
StringCchVPrintf(szText, ARRAYSIZE(szText), szCaption, parg);
|
|
|
|
LoadString(g_hInst, uCaption, szCaption, ARRAYSIZE(szCaption));
|
|
|
|
result = MessageBox(hWnd, szText, szCaption, uType);
|
|
|
|
va_end(parg);
|
|
|
|
return (result);
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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);
|
|
}
|