mirror of https://github.com/tongzx/nt5src
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
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_
|
|
|