|
|
//============================================================================
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: util.h
//
// History:
//
// 04/13/97 Kenn Takara Created.
//
// Declarations for some common code/macros.
//============================================================================
#ifndef _UTIL_H
#define _UTIL_H
#if _MSC_VER >= 1000 // VC 5.0 or later
#pragma once
#endif
#ifndef _TFSINT_H
#include "tfsint.h"
#endif
///////////////////////////////////////////////////////////////////////////////
// CWatermarkInfo
typedef struct _WATERMARKINFO { HBITMAP hHeader; HBITMAP hWatermark; HPALETTE hPalette; BOOL bStretch; } WATERMARKINFO, * LPWATERMARKINFO;
TFSCORE_API(HRESULT) InitWatermarkInfo(HINSTANCE hInstance, LPWATERMARKINFO pWatermarkInfo, UINT uIDHeader, UINT uIDWatermark, HPALETTE hPalette, BOOL bStretch);
TFSCORE_API(HRESULT) ResetWatermarkInfo(LPWATERMARKINFO pWatermarkInfo);
////////////////////////////////////////////////////////////////////
// CHiddenWnd : Hidden window to syncronize threads and CComponentData object
// When the handler receives the notification messages, it is running
// on the main thread (and can thus call MMC interfaces).
//
// If you need a background thread and don't need to access any of
// the MMC interfaces, you should create a pure worker thread instead
// of using this mechanism. The whole point of this is to synchronize
// our data calls with MMC (because they're a single-threaded app). *sigh*
// maximum number of threads we will be able to handle
// actually the max number is one less
// This value must be a multiple of 32
#define HIDDENWND_MAXTHREADS (512)
// These are the predefined messages for this window
//
/*---------------------------------------------------------------------------
WM_HIDDENWND_REGISTER wParam - TRUE if to register, FALSE to unregister lParam - if registering this is ignored if unregistering, this is the base value (the value that was returned by the call). RETURNS: the base value to use when posting the notifications returns 0 on error ---------------------------------------------------------------------------*/ #define WM_HIDDENWND_REGISTER WM_USER
/*---------------------------------------------------------------------------
WM_HIDDENWND_INDEX_HAVEDATA wParam - this is an ITFSThreadHandler * lParam - private data communication between the QueryObject and the parent node. RETURNS: N/A, use PostMessage() for this ---------------------------------------------------------------------------*/ #define WM_HIDDENWND_INDEX_HAVEDATA (0)
/*---------------------------------------------------------------------------
WM_HIDDENWND_INDEX_ERROR wParam - this is an ITFSThreadHandler * lParam - contains HRESULT RETURNS: N/A, use PostMessage() for this ---------------------------------------------------------------------------*/ #define WM_HIDDENWND_INDEX_ERROR (1)
/*---------------------------------------------------------------------------
WM_HIDDENWND_INDEX_EXITING wParam - this is an ITFSThreadHandler * lParam - not used RETURNS: N/A, use PostMessage() for this ---------------------------------------------------------------------------*/ #define WM_HIDDENWND_INDEX_EXITING (2)
#define WM_HIDDENWND_INDEX_LAST (2)
#define WM_HIDDENWND_INDEX_MAX (15)
class CHiddenWnd : public CWnd { public: CHiddenWnd() { DEBUG_INCREMENT_INSTANCE_COUNTER(CHiddenWnd); }
~CHiddenWnd() { DEBUG_DECREMENT_INSTANCE_COUNTER(CHiddenWnd); } BOOL Create();
private: BOOL FIsIdRegistered(UINT uObjectId);
DWORD m_bitMask[(HIDDENWND_MAXTHREADS >> 5)+1]; int m_iLastObjectIdSet; DWORD m_dwContext; public:
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); afx_msg LONG OnNotifyHaveData(WPARAM wParam, LPARAM lParam); afx_msg LONG OnNotifyError(WPARAM wParam, LPARAM lParam); afx_msg LONG OnNotifyExiting(WPARAM wParam, LPARAM lParam); //{{AFX_MSG(CHiddenWnd)
afx_msg LONG OnNotifyRegister(WPARAM wParam, LPARAM lParam); //}}AFX_MSG
DECLARE_MESSAGE_MAP() };
#define WM_TO_OBJECTID(wm) ((((wm)-WM_USER) >> 4))
#define WM_TO_MSGID(wm) (((wm)-WM_USER) & 0x0000000F)
#define OBJECTID_TO_WM(ob) ((((ob)) << 4) + WM_USER)
#define SetBitMask(x,n) (x[n>>5] |= (1 << (n%32)))
#define ClearBitMask(x,n) (x[n>>5] &= ~(1 << (n%32)))
#define IsBitMaskSet(x,n) (x[n>>5] & (1 << (n%32)))
#ifdef __cplusplus
extern "C" { #endif
TFSCORE_API(HRESULT) LoadAndAddMenuItem( IContextMenuCallback* pIContextMenuCallback, LPCTSTR pszMenuString, LONG lCommandID, LONG lInsertionPointID, LONG fFlags, LPCTSTR pszLangIndStr = NULL); #ifdef __cplusplus
} // extern "C"
#endif
#endif
|