227 lines
6.1 KiB
C++
227 lines
6.1 KiB
C++
/*
|
||
* 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 : kraigb@microsoft.com
|
||
* Compuserve: >INTERNET:kraigb@microsoft.com
|
||
*/
|
||
|
||
|
||
#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_
|
||
|