Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

227 lines
6.1 KiB

/*
* DATAUSER.H
* Data Object User Chapter 6
*
* Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
*
* Kraig Brockschmidt, Software Design Engineer
* Microsoft Systems Developer Relations
*
* Internet : [email protected]
* Compuserve: >INTERNET:[email protected]
*/
#ifndef _DATAUSER_H_
#define _DATAUSER_H_
#include "../syshead.h"
#include "../my3216.h"
#include "../bookpart.h"
#include "stpwatch.h"
//Menu Resource ID and Commands
#define IDR_MENU 1
// #define IDM_OBJECTUSEDLL 100
// #define IDM_OBJECTUSEEXE 101
// #define IDM_OBJECTDATASIZESMALL 102
// #define IDM_OBJECTDATASIZEMEDIUM 103
// #define IDM_OBJECTDATASIZELARGE 104
#define IDM_OBJECTQUERYGETDATA 105
#define IDM_OBJECTGETDATA_TEXT 106
#define IDM_OBJECTGETDATA_BITMAP 107
// #define IDM_OBJECTGETDATA_METAFILEPICT 108
#define IDM_OBJECTEXIT 109
#define IDM_OBJECTGETDATAHERE_TEXT 110
#define IDM_OBJECTGETDATAHERE_BITMAP 111
#define IDM_OBJECTGETDATAHERE_NULLTEXT 112
#define IDM_OBJECTGETDATAHERE_NULLBITMAP 113
#define IDM_USE16BITSERVER 120
#define IDM_USE32BITSERVER 121
#define IDM_OBJECTGETCANON 122
// Reserve Range..
#define IDM_OBJECTSETDATA 400
// ....
// reserved through 464
#define IDM_OBJECTSETDATAPUNK_TEXT 500
#define IDM_OBJECTSETDATAPUNK_BITMAP 501
#define IDM_MEASUREMENT_1 140
#define IDM_MEASUREMENT_50 141
#define IDM_MEASUREMENT_300 142
#define IDM_MEASUREMENT_OFF 145
#define IDM_MEASUREMENT_ON 146
#define IDM_MEASUREMENT_TEST 147
#define IDM_BATCHTOFILE 150
#define IDM_BATCH_GETDATA 151
#define IDM_BATCH_GETDATAHERE 152
// #define IDM_ADVISEMIN 200
// #define IDM_ADVISETEXT (IDM_ADVISEMIN+CF_TEXT)
// #define IDM_ADVISEBITMAP (IDM_ADVISEMIN+CF_BITMAP)
// #define IDM_ADVISEMETAFILEPICT (IDM_ADVISEMIN+CF_METAFILEPICT)
// #define IDM_ADVISEGETDATA 300
// #define IDM_ADVISEREPAINT 301
#ifdef WIN32
#define API_ENTRY APIENTRY
#else
#define API_ENTRY FAR PASCAL _export
#endif
//DATAUSER.CPP
LRESULT API_ENTRY DataUserWndProc(HWND, UINT, WPARAM, LPARAM);
class CImpIAdviseSink;
typedef class CImpIAdviseSink *PIMPIADVISESINK;
#define FILENAME "time.dat"
#define NUM_POINTS 15
typedef struct {
ULONG cData[NUM_POINTS];
ULONG cBest[NUM_POINTS];
ULONG cWorst[NUM_POINTS];
ULONG cTotal[NUM_POINTS];
} dataset_t;
/*
* Application-defined classes and types.
*/
class CAppVars
{
friend LRESULT API_ENTRY DataUserWndProc(HWND, UINT, WPARAM, LPARAM);
friend class CImpIAdviseSink;
protected:
HINSTANCE m_hInst; //WinMain parameters
HINSTANCE m_hInstPrev;
UINT m_nCmdShow;
HWND m_hWnd; //Main window handle
// BOOL m_fEXE; //For tracking menu
// PIMPIADVISESINK m_pIAdviseSink; //Our CImpIAdviseSink
// DWORD m_dwConn; //Advise connection
// UINT m_cfAdvise; //Advise format
// BOOL m_fGetData; //GetData on data change?
// BOOL m_fRepaint; //Repaint on data change?
// LPDATAOBJECT m_pIDataSmall;
// LPDATAOBJECT m_pIDataMedium;
// LPDATAOBJECT m_pIDataLarge;
LPDATAOBJECT m_pIDataObject; //Current selection
UINT m_f16Bit;
UINT m_cfFormat;
STGMEDIUM m_stm; //Current rendering
BOOL m_fInitialized; //Did CoInitialize work?
ULONG m_iDataSizeIndex;
HGLOBAL m_hgHereBuffers[64];
BOOL m_fDisplayTime;
LONG m_cIterations;
StopWatch_cl m_swTimer;
int m_HereAllocCount; // For debugging.
public:
CAppVars(HINSTANCE, HINSTANCE, UINT);
~CAppVars(void);
BOOL FInit(void);
BOOL FReloadDataObjects(BOOL);
void TryQueryGetData(LPFORMATETC, UINT, BOOL, UINT);
void Paint(void);
int m_GetDataHere(WORD wID);
int m_GetData(WORD wID);
int m_SetData_SetSize(long iSizeIndex);
int m_SetData_WithPUnk(WORD wID);
void m_SetMeasurement(WORD wID);
void m_MeasureAllSizes(WORD wID, LPTSTR title, dataset_t *);
void m_BatchToFile();
void m_DisplayTimerResults();
private:
void pm_DrawText(HDC hDc, LPTSTR psz, RECT* prc, UINT flags);
void pm_ClearDataset(dataset_t *);
};
typedef CAppVars *PAPPVARS;
#define CBWNDEXTRA sizeof(PAPPVARS)
#define DATAUSERWL_STRUCTURE 0
//This lives with the app to get OnDataChange notifications.
class CImpIAdviseSink : public IAdviseSink
{
protected:
ULONG m_cRef;
PAPPVARS m_pAV;
public:
CImpIAdviseSink(PAPPVARS);
~CImpIAdviseSink(void);
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//We only implement OnDataChange for now.
STDMETHODIMP_(void) OnDataChange(LPFORMATETC, LPSTGMEDIUM);
STDMETHODIMP_(void) OnViewChange(DWORD, LONG);
STDMETHODIMP_(void) OnRename(LPMONIKER);
STDMETHODIMP_(void) OnSave(void);
STDMETHODIMP_(void) OnClose(void);
};
//////////////////////////////////////////////////////////////////////////////
// Storage Medium IUnknown interface for pUnkForRelease.
//
class CStgMedIf: public IUnknown {
private:
ULONG m_cRef;
public:
CStgMedIf();
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
};
//////////////////////////
// API for getting a pUnkForRelease.
//
HRESULT GetStgMedpUnkForRelease(IUnknown **pp_unk);
#endif //_DATAUSER_H_