|
|
1.1 root 1: /***
2: *dspcalc2.h
3: *
4: * Copyright (C) 1992, Microsoft Corporation. All Rights Reserved.
5: * Information Contained Herein Is Proprietary and Confidential.
6: *
7: *Purpose:
8: * UNDONE
9: *
10: *
11: *Implementation Notes:
12: *
13: *****************************************************************************/
14:
15: #include "clsid.h"
16:
17: /*
18: * UNDONE: Shouldn't have to do this.
19: */
20: typedef BOOL boolean;
21:
22: /*
23: * The .h file included below is created via MkTypLib
24: */
25: #include "calctype.h"
26:
27: #pragma warning(disable:4355)
28:
29: #define DIM(X) (sizeof(X)/sizeof(X[0]))
30:
31:
32: class FAR CCalc : public IUnknown {
33: public:
34: static CCalc FAR* Create();
35:
36: STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
37: STDMETHOD_(ULONG, AddRef)(void);
38: STDMETHOD_(ULONG, Release)(void);
39:
40: // Introduced "calculator" interface
41: //
42: // This nested class implementes core arithmetic functionality
43: // (such as it is) *and* is the interface that will be exposed via
44: // IDispatch for external programmability.
45: //
46: class FAR CArith : _Calculator {
47: public:
48:
49: /* IUnknown methods */
50: STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR * ppvObj);
51: STDMETHOD_(ULONG, AddRef)(THIS);
52: STDMETHOD_(ULONG, Release)(THIS);
53:
54: /* _Calculator methods */
55: STDMETHOD_(void, put_Accum)(long l);
56: STDMETHOD_(long, get_Accum)(void);
57: STDMETHOD_(void, put_Opnd)(long l);
58: STDMETHOD_(long, get_Opnd)(void);
59: STDMETHOD_(void, put_Op)(short op);
60: STDMETHOD_(short, get_Op)(void);
61: STDMETHOD_(boolean, Eval)(void);
62: STDMETHOD_(void, Clear)(void);
63: STDMETHOD_(void, Display)(void);
64: STDMETHOD_(void, Quit)(void);
65: STDMETHOD_(BOOL, Button)(BSTR button);
66:
67: // the following method is internal, and not exposed for programmability
68: BOOL ButtonPush(int button);
69:
70: CArith(CCalc FAR* pcalc){
71: m_pcalc = pcalc;
72: Clear();
73: }
74:
75: enum states { STATE_LOPND, STATE_OP, STATE_ROPND, STATE_EVAL };
76:
77: private:
78: CCalc FAR* m_pcalc;
79:
80: short m_op;
81: long m_opnd;
82: long m_accum;
83: enum states m_state;
84: };
85: friend CArith;
86: CArith m_arith;
87:
88:
89: HWND m_hwnd;
90:
91: CCalc() : m_arith(this)
92: {
93: m_refs = 1;
94: m_hwnd = 0;
95: m_punkStdDisp = NULL;
96: }
97:
98: private:
99: ULONG m_refs;
100: IUnknown FAR* m_punkStdDisp;
101: };
102:
103:
104: // the CCalc Class Factory
105: //
106: class FAR CCalcCF : public IClassFactory {
107: public:
108: static IClassFactory FAR* Create();
109:
110: STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
111: STDMETHOD_(ULONG, AddRef)(void);
112: STDMETHOD_(ULONG, Release)(void);
113:
114: STDMETHOD(CreateInstance)(
115: IUnknown FAR* punkOuter, REFIID riid, void FAR* FAR* ppv);
116: STDMETHOD(LockServer)(BOOL fLock);
117:
118: CCalcCF() { m_refs = 1; }
119:
120: private:
121: ULONG m_refs;
122: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.