windows-nt/Source/XPSP1/NT/printscan/ui/printui/findloc.hxx
2020-09-26 16:20:57 +08:00

394 lines
6.7 KiB
C++

/*++
Copyright (C) Microsoft Corporation, 1998 - 1998
All rights reserved.
Module Name:
findloc.cxx
Abstract:
This module provides all the functions for browsing the
physical location tree stored in an Active Directory
Author:
Lazar Ivanov (Lazari) 23-Nov-1998
Steve Kiraly (SteveKi) 24-Nov-1998
Revision History:
--*/
#ifndef _FINDLOC_HXX_
#define _FINDLOC_HXX_
/******************************************************************************
Data structures for communication between UI thread and
the background DS query thread
******************************************************************************/
class TLocData : public MRefCom
{
SIGNATURE('fldt')
public:
TLocData(
IN LPCTSTR pszClassName,
IN LPCTSTR pszPropertyName,
IN UINT uMsgDataReady,
IN BOOL bFindPhysicalLocation
);
~TLocData(
VOID
);
BOOL
bValid(
VOID
) const;
VOID
vNotifyUIDataIsReady(
VOID
);
static VOID
FindLocationsThread(
IN TLocData *pLocData
);
class TLoc
{
SIGNATURE('tlda')
ALWAYS_VALID
public:
TLoc(
VOID
);
~TLoc(
VOID
);
TString strLocation;
DLINK (TLoc, _Location);
private:
//
// Operator = and copy are not defined.
//
TLoc &
TLoc::operator = (
IN const TLoc &rhs
);
TLoc::
TLoc(
IN const TLoc &rhs
);
};
TString _strDefault; // Default location string
TString _strDSName; // The directory service name
//
// linked list from all the locations
//
DLINK_BASE( TLoc, _LocationList, _Location );
private:
//
// Operator = and copy are not defined.
//
TLocData &
TLocData::operator =(
IN const TLocData &rhs
);
TLocData::
TLocData(
IN const TLocData &rhs
);
VOID
vDoTheWork(
VOID
);
VOID
vRefZeroed(
VOID
);
BOOL
bSearchLocations(
IN TDirectoryService &ds
);
//
// Private data members
//
UINT _uMsgDataReady; // The registered message for data ready
TString _strWindowClass; // TFindLocDlg window class name
TString _strPropertyName; // Property of the window we should look for
BOOL _bValid; // Is the class valid and usable
BOOL _bFindPhysicalLocation; // Should we find out the exact location of the current machine
BOOL _bIsDataReady; // Should be set TRUE from the worker thread when
// the work is done & thread is about to dismis
};
/******************************************************************************
Tree Control class wrapper.
Displays the location hierarchy.
******************************************************************************/
class TLocTree
{
SIGNATURE('floc')
ALWAYS_VALID
public:
TLocTree (
IN HWND hWnd
);
~TLocTree (
VOID
);
VOID
vResetTree(
VOID
);
VOID
vBuildTree(
IN const TLocData *pLocData
);
VOID
vInsertRootString(
IN const TLocData *pLocData
);
BOOL
bInsertLocString (
IN const TString &strLoc
) const;
BOOL
bGetSelectedLocation(
OUT TString &strLoc
) const;
VOID
vExpandTree(
IN const TString &strExpand
) const;
VOID
vFillTree(
IN const TLocData *pLocData
) const;
private:
// copy and assignment are prohibited
TLocTree &
operator =(
IN const TLocTree &
);
TLocTree(
IN const TLocTree &
);
HTREEITEM
IsAChild(
IN LPCTSTR szLoc,
IN HTREEITEM hParent
) const;
static
LRESULT CALLBACK
ThunkProc(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
);
LRESULT
nHandleMessage(
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
);
//
// Private data members
//
HWND _hwndTree;
HTREEITEM _hRoot;
HIMAGELIST _hIml;
// imagelist offsets
INT _iGlobe;
INT _iSite;
// subclassing for wait cursor
HCURSOR _hCursorWait;
BOOL _bWaitData;
WNDPROC _DefProc;
};
/******************************************************************************
Find Location Dialog - exposes UI for traversing
the physical location hierarchy stored in the Active Directory
******************************************************************************/
class TFindLocDlg : public MGenericDialog
{
SIGNATURE('floc')
ALWAYS_VALID
public:
static
BOOL
bGenerateGUIDAsString(
OUT TString *pstrGUID
);
//
// Some flags to control the UI
//
enum ELocationUI
{
kLocationDefaultUI = 0,
kLocationShowHelp = 1 << 0,
};
TFindLocDlg(
IN ELocationUI flags = kLocationDefaultUI
);
~TFindLocDlg(
VOID
);
BOOL
bDoModal(
IN HWND hParent,
OUT TString *pstrDefault = NULL
);
BOOL
bGetLocation(
OUT TString &strLocation
);
private:
// copy and assignment are undefined
TFindLocDlg &
operator =(
IN const TFindLocDlg &
);
TFindLocDlg(
IN const TFindLocDlg &
);
BOOL
bInitTree(
VOID
);
BOOL
bHandleMessage(
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
);
VOID
vDataIsReady(
VOID
);
BOOL
bOnInitDialog(
VOID
);
BOOL
bOnTreeNotify (
IN LPNMTREEVIEW pTreeNotify
);
VOID
vOnOK(
VOID
);
VOID
vOnDestroy(
VOID
);
VOID
vStartAnim(
VOID
);
VOID
vStopAnim(
VOID
);
BOOL
bOnCtlColorStatic(
IN HDC hdc,
IN HWND hStatic
);
BOOL
bStartTheBackgroundThread(
VOID
);
BOOL
bOnCommand(
IN UINT uCmdID
);
//
// Private data members
//
TLocTree* _pTree;
TString _strSelLocation;
TString _strPropertyName;
TLocData* _pLocData;
BOOL _bValid;
TString _strDefault;
ELocationUI _UIFlags;
UINT _uMsgDataReady;
};
#endif