2025-11-27 16:46:48 +09:00

277 lines
9.7 KiB
C++

// ==========================================================================
// Class Specification : COXNetBrowseTree
// ==========================================================================
// Header file : OXNetBrowseTree.h
// Version: 9.3
// This software along with its related components, documentation and files ("The Libraries")
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
// to obtain this file, or directly from our office. For a copy of the license governing
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
// //////////////////////////////////////////////////////////////////////////
// Properties:
// NO Abstract class (does not have any objects)
// YES Derived from CTreeCtrl
// YES Is a Cwnd.
// YES Two stage creation (constructor & Create())
// YES Has a message map
// YES Needs a resource (IDB_NET_IMAGELIST bitmap)
// NO Persistent objects (saveable on disk)
// NO Uses exceptions
// //////////////////////////////////////////////////////////////////////////
// Desciption :
// This tree control shows the network resources.
// It is derived from CTreeCtrl so it can be used to subclass a tree control
// Some initial setting can be supplied through the functions
// ShowCommentName(), ShowDisks(), ShowPrinters(), SetMaxNumLevels()
// The normal notifications from this tree control to its parent window can be used
// (e.g. TVN_SELCHANGED)
// GetCurrentNetResource() returns the network resource of the currently selected item
// It contains info about : type, display type, local name, remote name, comment and provider
// Remark:
// It uses the bitmap resource IDB_NET_IMAGELIST to show icons for each type of resource
// Some string resources are used as well
// The reserved ID ranges are : 23100 -> 23119 and 53100 -> 53119
// Prerequisites (necessary conditions):
/////////////////////////////////////////////////////////////////////////////
#ifndef __OXNETBROWSETREE_H__
#define __OXNETBROWSETREE_H__
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "OXDllExt.h"
#include <afxtempl.h>
#include "WinNetWk.h" // To browse network resources (mpr.lib)
// ... Make sure linker uses the the network library
#pragma comment(lib, "mpr.lib")
// To work around the problem when putting a HTREEITEM in an MFC collection
// we declare the dummy structure here (see also MSDN PSS ID Number: Q140229)
struct _TREEITEM {};
class OX_CLASS_DECL COXNetBrowseTree : public CTreeCtrl
{
DECLARE_DYNAMIC(COXNetBrowseTree);
// Data members -------------------------------------------------------------
public:
protected:
BOOL m_bInitialized;
BOOL m_bShowCommentName;
BOOL m_bShowDisks;
BOOL m_bShowPrinters;
int m_nResourceScope;
int m_nMaxNumLevels;
int m_nInitialExpandLevel;
BOOL m_bReport;
const NETRESOURCE* m_pCurrentNetResource;
CImageList m_netImages;
CMap<HTREEITEM, HTREEITEM, NETRESOURCE*, NETRESOURCE*> m_resourceMap;
private:
// Member functions ---------------------------------------------------------
public:
COXNetBrowseTree();
// --- In :
// --- Out :
// --- Returns :
// --- Effect : Constructs the object
BOOL IsInitialized() const;
// --- In :
// --- Out :
// --- Returns : Whether the initialization was successful
// --- Effect :
virtual BOOL Initialize();
// --- In :
// --- Out :
// --- Returns : Whether the initialization was successful
// --- Effect : Initializes the object
// This function is called automatically and should almost never be called directly
BOOL ShowCommentName(BOOL bShow);
// --- In : bShow : Whether the comment name of each resource should be shown as well
// --- Out :
// --- Returns : The previous setting
// --- Effect :
BOOL ShowDisks(BOOL bShow);
// --- In : bShow : Whether disk resources should be shown
// --- Out :
// --- Returns : The previous setting
// --- Effect :
BOOL ShowPrinters(BOOL bShow);
// --- In : bShow : Whether printer resources should be shown
// --- Out :
// --- Returns : The previous setting
// --- Effect :
int SetResourceScope(int nScope);
// --- In : nScope : The scope of resource that will be displayed
// --- Out :
// --- Returns : The previous setting
// --- Effect : Possible values are RESOURCE_CONNECTED (connected resources),
// RESOURCE_GLOBALNET (global resources) or
// RESOURCE_REMEMBERED (persistent connections)
// RESOURCE_RECENT (recent connections, Win 4 only)
// RESOURCE_CONTEXT (current context resources, Win 4 only)
// By default RESOURCE_GLOBALNET is used
int SetMaxNumLevels(int nMaxNumLevels);
// --- In : nMaxNumLevels : The maximum number of levels of the tree that may be shown
// Deeper children will not be accessible
// (1 = only the root, 2 = only the root and its direct children, etc.)
// --- Out :
// --- Returns : The previous setting
// --- Effect : By default all levels are shown
int SetInitialExpandLevel(int nLevel);
// --- In : nLevels : Number of levels to expand
// --- Out :
// --- Returns : The previous setting
// --- Effect : Set the number of levels the tree should be expanded
// when it is first show
// When you expand 1 level you will end up with 2 levels shown
// (the root level and the expanded level)
BOOL ReportErrors(BOOL bReport);
// --- In : bReport : Whether network errors should be reported to the user
// --- Out :
// --- Returns : The previous setting
// --- Effect :
virtual BOOL BuildTreeContents();
// --- In :
// --- Out :
// --- Returns : Whether the build was successful
// --- Effect : Fills the tree control with its actual contents
// All setting that are important for this (e.g. ShowDisks() etc)
// are used now
// This function is called automatically but can be called
// explicitly to rebuild the tree
const NETRESOURCE* GetCurrentNetResource() const;
// --- In :
// --- Out :
// --- Returns : The net resource info belonging to the currently foccused item
// --- Effect : When this function is called after the window has been destroyed
// (but before this C++ object has been deleted) the last selected
// item is used.
const NETRESOURCE* GetAssocNetResource(HTREEITEM hTreeItem) const;
// --- In : hTreeItem : Node of which the associated net resource is requested
// --- Out :
// --- Returns : The net resource associated with the specified node
// --- Effect : Should only be called for valid tree items
void ExpandBranch(HTREEITEM hParentItem, int nLevels);
// --- In : hParentItem : Item to expand
// nLevels : Number of levels to expand
// --- Out :
// --- Returns :
// --- Effect : Expand a specified item of the tree a specified number of levels
int GetItemLevel(HTREEITEM hTreeItem);
// --- In : hTreeItem
// --- Out :
// --- Returns : The level in the tree on which the item exists
// (root = 0, its direct children = 1, etc)
// --- Effect :
virtual BOOL Uninitialize();
// --- In :
// --- Out :
// --- Returns : Whether the uninitialization was successful
// --- Effect : Uninitializes the object
// This function is called automatically and should almost never be called directly
#ifdef _DEBUG
virtual void AssertValid() const;
// --- In :
// --- Out :
// --- Returns :
// --- Effect : AssertValid performs a validity check on this object
// by checking its internal state.
// In the Debug version of the library, AssertValid may assert and
// thus terminate the program.
virtual void Dump(CDumpContext& dc) const;
// --- In : dc : The diagnostic dump context for dumping, usually afxDump.
// --- Out :
// --- Returns :
// --- Effect : Dumps the contents of the object to a CDumpContext object.
// It provides diagnostic services for yourself and
// other users of your class.
// Note The Dump function does not print a newline character
// at the end of its output.
#endif
virtual ~COXNetBrowseTree();
// --- In :
// --- Out :
// --- Returns :
// --- Effect : Destructor of the object
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(COXNetBrowseTree)
protected:
virtual void PreSubclassWindow();
virtual void PostNcDestroy();
//}}AFX_VIRTUAL
protected:
virtual NETRESOURCE* GetAssocNetResourceEx(HTREEITEM hTreeItem) const;
BOOL ExpandNode(HTREEITEM hTreeItem);
BOOL CreateChildren(HTREEITEM hParentItem, NETRESOURCE* pParentNetResources);
HTREEITEM InsertResourceItem(const NETRESOURCE* pNetResources, HTREEITEM hParentItem);
void Cleanup();
virtual void ReportNetError(DWORD nResult, LPCTSTR pszResource);
CString GetResultMessage(HRESULT resultCode, ...);
BOOL RetrieveResultMessage(CString sModuleName, HRESULT resultCode,
va_list* pArgs, CString& sResultMessage);
virtual BOOL PreInsertResourceItem(const NETRESOURCE* pNetResources, TV_INSERTSTRUCT * pIinsertStruct);
virtual void PostInsertResourceItem(const NETRESOURCE* pNetResources, TV_INSERTSTRUCT * pInsertStruct, HTREEITEM hNewItem);
//{{AFX_MSG(COXNetBrowseTree)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg BOOL OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnGetDispInfo(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
afx_msg LRESULT OnPostInit(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
private:
};
#endif // __OXNETBROWSETREE_H__
// ==========================================================================