












??1
#define
?TRUE?1
??2
#define
?FALSE?0
??3
??4
typedef?
char
*
?LPSTR;
??5
typedef?
const
?
char
*
?LPCSTR;
??6
??7
typedef?unsigned?
long
??DWORD;
??8
typedef?
int
????????????BOOL;
??9
typedef?unsigned?
char
??BYTE;
?10
typedef?unsigned?
short
?WORD;
?11
typedef?
int
????????????INT;
?12
typedef?unsigned?
int
???UINT;
?13
typedef?
long
???????????LONG;
?14
?15
typedef?UINT???????????WPARAM;
?16
typedef?LONG???????????LPARAM;
?17
typedef?LONG???????????LRESULT;
?18
typedef?
int
????????????HWND;
?19
?20
#define
?WM_COMMAND?????0x0111??
//
?following?windows.h
?21
#define
?WM_CREATE??????0x0001
?22
#define
?WM_PAINT???????0x000F
?23
#define
?WM_NOTIFY??????0x004E
?24
?25
#define
?CObjectid??????????????0xffff
?26
#define
???CCmdTargetid?????????1
?27
#define
?????CWinThreadid???????11
?28
#define
???????CWinAppid????????111
?29
#define
?????????CMyWinAppid????1111
?30
#define
?????CWndid?????????????12
?31
#define
???????CFrameWndid??????121
?32
#define
?????????CMyFrameWndid??1211
?33
#define
???????CViewid??????????122
?34
#define
?????????CMyViewid??????1221
?35
#define
?????CDocumentid????????13
?36
#define
???????CMyDocid?????????131
?37
?38
#include?
<
iostream.h
>
?39
?40
/**/
//////////////////////////////////////////////////////////////////
//
?41
//
?Window?message?map?handling
?42
?43
struct
?AFX_MSGMAP_ENTRY;
?44
?45
struct
?AFX_MSGMAP
?46
{
?47
????????AFX_MSGMAP
*
?pBaseMessageMap;
?48
????????AFX_MSGMAP_ENTRY
*
?lpEntries;
?49
}
;
?50
?51
#define
?DECLARE_MESSAGE_MAP()?\
?52
????????
static
?AFX_MSGMAP_ENTRY?_messageEntries[];?\
?53
????????
static
?AFX_MSGMAP?messageMap;?\
?54
????????
virtual
?AFX_MSGMAP
*
?GetMessageMap()?
const
;
?55
?56
#define
?BEGIN_MESSAGE_MAP(theClass,?baseClass)?\
?57
????????AFX_MSGMAP
*
?theClass::GetMessageMap()?
const
?\
?58
????????????????
{?
return
?
&
theClass::messageMap;?}
?\
?59
????????AFX_MSGMAP?theClass::messageMap?
=
?\
?60
????????
{?
&
(baseClass::messageMap),?\
?61
????????????????(AFX_MSGMAP_ENTRY
*
)?
&
(theClass::_messageEntries)?}
;?\
?62
????????AFX_MSGMAP_ENTRY?theClass::_messageEntries[]?
=
?\
?63
????????
{
?64
?65
#define
?END_MESSAGE_MAP()?\
?66
????????
{?
0
,?
0
,?
0
,?
0
,?AfxSig_end,?(AFX_PMSG)
0
?}
?\
?67
????????}
;
?68
?69
//
?Message?map?signature?values?and?macros?in?separate?header
?70
#include?
"
afxmsg_.h
"
?71
?72
class
?CObject
?73
{
?74
public
:
?75
??CObject::CObject()??
{
?76
??????????????????????}
?77
??CObject::
~
CObject()?
{
?78
??????????????????????}
?79
}
;
?80
?81
class
?CCmdTarget?:?
public
?CObject
?82
{
?83
public
:
?84
??CCmdTarget::CCmdTarget()??
{
?85
????????????????????????????}
?86
??CCmdTarget::
~
CCmdTarget()?
{
?87
????????????????????????????}
?88
?89
??
virtual
?BOOL?OnCmdMsg(UINT?nID,?
int
?nCode);
?90
?91
??DECLARE_MESSAGE_MAP()???????
//
?base?class?-?no?{{?}}?macros
?92
}
;
?93
?94
typedef?
void
?(CCmdTarget::
*
AFX_PMSG)(
void
);
?95
?96
struct
?AFX_MSGMAP_ENTRY??
//
?MFC?4.0?format
?97
{
?98
????UINT?nMessage;?
//
?windows?message
?99
????UINT?nCode;????
//
?control?code?or?WM_NOTIFY?code
100
????UINT?nID;??????
//
?control?ID?(or?0?for?windows?messages)
101
????UINT?nLastID;??
//
?used?for?entries?specifying?a?range?of?control?id's
102
????UINT?nSig;?????
//
?signature?type?(action)?or?pointer?to?message?#
103
????AFX_PMSG?pfn;??
//
?routine?to?call?(or?special?value)
104
}
;
105
106
class
?CWinThread?:?
public
?CCmdTarget
107
{
108
public
:
109
??CWinThread::CWinThread()??
{
110
????????????????????????????}
111
??CWinThread::
~
CWinThread()?
{
112
????????????????????????????}
113
114
??
virtual
?BOOL?InitInstance()?
{
115
????????????????????????????????cout?
<<
?
"
CWinThread::InitInstance?\n
"
;
116
????????????????????????????????
return
?TRUE;
117
??????????????????????????????}
118
??
virtual
?
int
?Run()?
{
119
??????????????????????cout?
<<
?
"
CWinThread::Run?\n
"
;
120
??????????????????????
//
?AfxWndProc(
);
121
??????????????????????
return
?
1
;
122
????????????????????}
123
}
;
124
125
class
?CWnd;
126
127
class
?CWinApp?:?
public
?CWinThread
128
{
129
public
:
130
??CWinApp
*
?m_pCurrentWinApp;
131
??CWnd
*
?m_pMainWnd;
132
133
public
:
134
??CWinApp::CWinApp()??
{
135
????????????????????????m_pCurrentWinApp?
=
?
this
;
136
??????????????????????}
137
??CWinApp::
~
CWinApp()?
{
138
??????????????????????}
139
140
??
virtual
?BOOL?InitApplication()?
{
141
???????????????????????????????????cout?
<<
?
"
CWinApp::InitApplication?\n
"
;
142
???????????????????????????????????
return
?TRUE;
143
?????????????????????????????????}
144
??
virtual
?BOOL?InitInstance()????
{
145
???????????????????????????????????cout?
<<
?
"
CWinApp::InitInstance?\n
"
;
146
???????????????????????????????????
return
?TRUE;
147
?????????????????????????????????}
148
??
virtual
?
int
?Run()?
{
149
??????????????????????cout?
<<
?
"
CWinApp::Run?\n
"
;
150
??????????????????????
return
?CWinThread::Run();
151
????????????????????}
152
153
??DECLARE_MESSAGE_MAP()
154
}
;
155
156
typedef?
void
?(CWnd::
*
AFX_PMSGW)(
void
);
157
????????????????
//
?like?'AFX_PMSG'?but?for?CWnd?derived?classes?only
158
159
class
?CDocument?:?
public
?CCmdTarget
160
{
161
public
:
162
??CDocument::CDocument()???
{
163
???????????????????????????}
164
??CDocument::
~
CDocument()??
{
165
???????????????????????????}
166
167
??
virtual
?BOOL?OnCmdMsg(UINT?nID,?
int
?nCode);
168
169
??DECLARE_MESSAGE_MAP()
170
}
;
171
172
class
?CWnd?:?
public
?CCmdTarget
173
{
174
public
:
175
??CWnd::CWnd()???
{
176
?????????????????}
177
??CWnd::
~
CWnd()??
{
178
?????????????????}
179
180
??
virtual
?BOOL?Create();
181
??BOOL?CreateEx();
182
??
virtual
?BOOL?PreCreateWindow();
183
??
virtual
?LRESULT?WindowProc(UINT?nMsg,?WPARAM?wParam,?LPARAM?lParam);
184
??
virtual
?LRESULT?DefWindowProc(UINT?message,?WPARAM?wParam,?LPARAM?lParam);
185
??
virtual
?BOOL?OnCommand(WPARAM?wParam,?LPARAM?lParam);
186
187
??DECLARE_MESSAGE_MAP()
188
}
;
189
190
class
?CView;
191
192
class
?CFrameWnd?:?
public
?CWnd
193
{
194
public
:
195
??CView
*
?m_pViewActive;???????
//
?current?active?view
196
197
public
:
198
??CFrameWnd::CFrameWnd()???
{
199
???????????????????????????}
200
??CFrameWnd::
~
CFrameWnd()??
{
201
???????????????????????????}
202
??BOOL?Create();
203
??
virtual
?BOOL?PreCreateWindow();
204
??CView
*
?GetActiveView()?
const
;
205
??
virtual
?BOOL?OnCommand(WPARAM?wParam,?LPARAM?lParam);
206
??
virtual
?BOOL?OnCmdMsg(UINT?nID,?
int
?nCode);
207
208
??DECLARE_MESSAGE_MAP()
209
210
??friend?CView;
211
}
;
212
213
class
?CView?:?
public
?CWnd
214
{
215
public
:
216
??CDocument
*
?m_pDocument;
217
218
public
:
219
??CView::CView()???
{
220
???????????????????}
221
??CView::
~
CView()??
{
222
???????????????????}
223
224
??
virtual
?BOOL?OnCmdMsg(UINT?nID,?
int
?nCode);
225
226
??DECLARE_MESSAGE_MAP()
227
228
??friend?CFrameWnd;
229
}
;
230
231
//
?global?function
232
CWinApp
*
?AfxGetApp();
233
LRESULT?AfxWndProc(HWND?hWnd,?UINT?nMsg,?WPARAM?wParam,?LPARAM?lParam,
234
???????????????????CWnd
*
?pWnd);?
//
?last?param.?pWnd?is?added?by?JJHOU.
235
LRESULT?AfxCallWndProc(CWnd
*
?pWnd,?HWND?hWnd,?UINT?nMsg,?WPARAM?wParam,
236
???????????????????????LPARAM?lParam);
237

??2

??3

??4

??5

??6

??7

??8

??9

?10

?11

?12

?13

?14

?15

?16

?17

?18

?19

?20

?21

?22

?23

?24

?25

?26

?27

?28

?29

?30

?31

?32

?33

?34

?35

?36

?37

?38

?39

?40


?41

?42

?43

?44

?45

?46



?47

?48

?49

?50

?51

?52

?53

?54

?55

?56

?57

?58



?59

?60



?61

?62

?63



?64

?65

?66



?67

?68

?69

?70

?71

?72

?73



?74

?75



?76

?77



?78

?79

?80

?81

?82



?83

?84



?85

?86



?87

?88

?89

?90

?91

?92

?93

?94

?95

?96

?97



?98

?99

100

101

102

103

104

105

106

107



108

109



110

111



112

113

114



115

116

117

118



119

120


121

122

123

124

125

126

127

128



129

130

131

132

133

134



135

136

137



138

139

140



141

142

143

144



145

146

147

148



149

150

151

152

153

154

155

156

157

158

159

160



161

162



163

164



165

166

167

168

169

170

171

172

173



174

175



176

177



178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193



194

195

196

197

198



199

200



201

202

203

204

205

206

207

208

209

210

211

212

213

214



215

216

217

218

219



220

221



222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

?1
#include?
<
iostream.h
>
?2
#include?
"
mfc.h
"
?3
?4
class
?CMyWinApp?:?
public
?CWinApp
?5
{
?6
public
:
?7
??CMyWinApp::CMyWinApp()???
{
?8
???????????????????????????}
?9
??CMyWinApp::
~
CMyWinApp()??
{
10
???????????????????????????}
11
??
virtual
?BOOL?InitInstance();
12
??DECLARE_MESSAGE_MAP()
13
}
;
14
15
class
?CMyFrameWnd?:?
public
?CFrameWnd
16
{
17
public
:
18
??CMyFrameWnd();
19
??
~
CMyFrameWnd()??
{
20
??????????????????}
21
??DECLARE_MESSAGE_MAP()
22
}
;
23
24
class
?CMyDoc?:?
public
?CDocument
25
{
26
public
:
27
??CMyDoc::CMyDoc()??
{
28
????????????????????}
29
??CMyDoc::
~
CMyDoc()?
{
30
????????????????????}
31
??DECLARE_MESSAGE_MAP()
32
}
;
33
34
class
?CMyView?:?
public
?CView
35
{
36
public
:
37
??CMyView::CMyView()???
{
38
???????????????????????}
39
??CMyView::
~
CMyView()??
{
40
???????????????????????}
41
??DECLARE_MESSAGE_MAP()
42
}
;
43

?2

?3

?4

?5



?6

?7



?8

?9



10

11

12

13

14

15

16



17

18

19



20

21

22

23

24

25



26

27



28

29



30

31

32

33

34

35



36

37



38

39



40

41

42

43

??1
#include?
"
my.h
"
??
//
?贛?mfc.h?碞?extern?CMyWinApp?┮
??2
??3
extern
?CMyWinApp?theApp;
??4
extern
?
void
?printlpEntries(AFX_MSGMAP_ENTRY
*
?lpEntry);
??5
??6
BOOL?CCmdTarget::OnCmdMsg(UINT?nID,?
int
?nCode)
??7
{
??8
????cout?
<<
?
"
CCmdTarget::OnCmdMsg()
"
?
<<
?endl;
??9
????
//
?Now?look?through?message?map?to?see?if?it?applies?to?us
?10
????AFX_MSGMAP
*
?pMessageMap;
?11
????AFX_MSGMAP_ENTRY
*
?lpEntry;
?12
????
for
?(pMessageMap?
=
?GetMessageMap();?pMessageMap?
!=
?NULL;
?13
?????????pMessageMap?
=
?pMessageMap
->
pBaseMessageMap)
?14
????
{
?15
????????????lpEntry?
=
?pMessageMap
->
lpEntries;
?16
????????????printlpEntries(lpEntry);
?17
????}
?18
?19
????
return
?FALSE;???
//
?not?handled
?20
}
?21
?22
BOOL?CWnd::Create()
?23
{
?24
????cout?
<<
?
"
CWnd::Create?\n
"
;
?25
????
return
?TRUE;
?26
}
?27
?28
BOOL?CWnd::CreateEx()
?29
{
?30
????cout?
<<
?
"
CWnd::CreateEx?\n
"
;
?31
????PreCreateWindow();
?32
????
return
?TRUE;
?33
}
?34
?35
BOOL?CWnd::PreCreateWindow()
?36
{
?37
??cout?
<<
?
"
CWnd::PreCreateWindow?\n
"
;
?38
??
return
?TRUE;
?39
}
?40
?41
LRESULT?CWnd::WindowProc(UINT?nMsg,?WPARAM?wParam,?LPARAM?lParam)
?42
{
?43
????AFX_MSGMAP
*
?pMessageMap;
?44
????AFX_MSGMAP_ENTRY
*
?lpEntry;
?45
?46
????cout?
<<
?
"
CWnd::WindowProc()
"
?
<<
?endl;
?47
????
if
?(nMsg?
==
?WM_COMMAND)?
//
?special?case?for?commands
?48
????
{
?49
????????
if
?(OnCommand(wParam,?lParam))
?50
????????????
return
?
1L
;?
//
?command?handled
?51
????????
else
?52
????????????
return
?(LRESULT)DefWindowProc(nMsg,?wParam,?lParam);
?53
????}
?54
?55
????pMessageMap?
=
?GetMessageMap();
?56
?57
????
for
?(;?pMessageMap?
!=
?NULL;
?58
?????????pMessageMap?
=
?pMessageMap
->
pBaseMessageMap)
?59
????
{
?60
????????????lpEntry?
=
?pMessageMap
->
lpEntries;
?61
????????????printlpEntries(lpEntry);
?62
????}
?63
????
return
?
0
;??
//
?J.J.Hou:?if?find,?should?call?lpEntry->pfn,
?64
???????????????
//
?otherwise?should?call?DefWindowProc.
?65
???????????????
//
?for?simplization?we?just?return?0.
?66
}
?67
?68
LRESULT?CWnd::DefWindowProc(UINT?message,?WPARAM?wParam,?LPARAM?lParam)
?69
{
?70
????cout?
<<
?
"
CWnd::DefWindowProc()
"
?
<<
?endl;
?71
????
return
?TRUE;
?72
}
?73
?74
BOOL?CWnd::OnCommand(WPARAM?wParam,?LPARAM?lParam)
?75
{
?76
????cout?
<<
?
"
CWnd::OnCommand()
"
?
<<
?endl;
?77
????
//
?
?78
????
return
?OnCmdMsg(
0
,?
0
);
?79
}
?80
?81
BOOL?CFrameWnd::OnCommand(WPARAM?wParam,?LPARAM?lParam)
?82
{
?83
????cout?
<<
?
"
CFrameWnd::OnCommand()
"
?
<<
?endl;
?84
????
//
?
?85
????
//
?route?as?normal?command
?86
????
return
?CWnd::OnCommand(wParam,?lParam);
?87
}
?88
?89
BOOL?CFrameWnd::Create()
?90
{
?91
????cout?
<<
?
"
CFrameWnd::Create?\n
"
;
?92
????CreateEx();
?93
????
return
?TRUE;
?94
}
?95
?96
BOOL?CFrameWnd::PreCreateWindow()
?97
{
?98
????cout?
<<
?
"
CFrameWnd::PreCreateWindow?\n
"
;
?99
????
return
?TRUE;
100
}
101
102
CView
*
?CFrameWnd::GetActiveView()?
const
103
{
104
????cout?
<<
?
"
CFrameWnd::GetActiveView()
"
?
<<
?endl;
105
????
return
?m_pViewActive;
106
}
107
108
BOOL?CFrameWnd::OnCmdMsg(UINT?nID,?
int
?nCode)
109
{
110
????cout?
<<
?
"
CFrameWnd::OnCmdMsg()
"
?
<<
?endl;
111
????
//
?pump?through?current?view?FIRST
112
????CView
*
?pView?
=
?GetActiveView();
113
????
if
?(pView
->
OnCmdMsg(nID,?nCode))
114
????????????
return
?TRUE;
115
116
????
//
?then?pump?through?frame
117
????
if
?(CWnd::OnCmdMsg(nID,?nCode))
118
????????????
return
?TRUE;
119
120
????
//
?last?but?not?least,?pump?through?app
121
????CWinApp
*
?pApp?
=
?AfxGetApp();
122
????
if
?(pApp
->
OnCmdMsg(nID,?nCode))
123
????????????
return
?TRUE;
124
125
????
return
?FALSE;
126
}
127
128
BOOL?CDocument::OnCmdMsg(UINT?nID,?
int
?nCode)
129
{
130
????cout?
<<
?
"
CDocument::OnCmdMsg()
"
?
<<
?endl;
131
????
if
?(CCmdTarget::OnCmdMsg(nID,?nCode))
132
????????
return
?TRUE;
133
134
????
return
?FALSE;
135
}
136
137
BOOL?CView::OnCmdMsg(UINT?nID,?
int
?nCode)
138
{
139
????cout?
<<
?
"
CView::OnCmdMsg()
"
?
<<
?endl;
140
????
if
?(CWnd::OnCmdMsg(nID,?nCode))
141
????????
return
?TRUE;
142
143
????BOOL?bHandled?
=
?FALSE;
144
????bHandled?
=
?m_pDocument
->
OnCmdMsg(nID,?nCode);
145
????
return
?bHandled;
146
}
147
148
AFX_MSGMAP
*
?CCmdTarget::GetMessageMap()?
const
??
//
?JJHou:?in?MFC?40?cmdtarg.cpp
149
{
150
????
return
?
&
CCmdTarget::messageMap;
151
}
152
153
AFX_MSGMAP?CCmdTarget::messageMap?
=
???
//
?JJHou:?in?in?MFC?40?cmdtarg.cpp
154
{
155
????NULL,
156
????
&
CCmdTarget::_messageEntries[
0
]
157
}
;
158
159
AFX_MSGMAP_ENTRY?CCmdTarget::_messageEntries[]?
=
?
//
?JJHou:?in?in?MFC?40?cmdtarg.cpp
160
{
161
????
{?
0
,?
0
,?CCmdTargetid,?
0
,?AfxSig_end,?
0
?}
??
//
?nothing?here
162
}
;
163
164
BEGIN_MESSAGE_MAP(CWnd,?CCmdTarget)
165
ON_COMMAND(CWndid,?
0
)
166
END_MESSAGE_MAP()
167
168
BEGIN_MESSAGE_MAP(CFrameWnd,?CWnd)
169
ON_COMMAND(CFrameWndid,?
0
)
170
END_MESSAGE_MAP()
171
172
BEGIN_MESSAGE_MAP(CDocument,?CCmdTarget)
173
ON_COMMAND(CDocumentid,?
0
)
174
END_MESSAGE_MAP()
175
176
BEGIN_MESSAGE_MAP(CView,?CWnd)
177
ON_COMMAND(CViewid,?
0
)
178
END_MESSAGE_MAP()
179
180
BEGIN_MESSAGE_MAP(CWinApp,?CCmdTarget)
181
ON_COMMAND(CWinAppid,?
0
)
182
END_MESSAGE_MAP()
183
184
CWinApp
*
?AfxGetApp()
185
{
186
??
return
?theApp.m_pCurrentWinApp;
187
}
188
189
LRESULT?AfxWndProc(HWND?hWnd,?UINT?nMsg,?WPARAM?wParam,?LPARAM?lParam,
190
???????????????????CWnd?
*
pWnd)??
//
?last?param.?pWnd?is?added?by?JJHou.
191
{
192
??cout?
<<
?
"
AfxWndProc()
"
?
<<
?endl;
193
??
return
?AfxCallWndProc(pWnd,?hWnd,?nMsg,?wParam,?lParam);
194
}
195
196
LRESULT?AfxCallWndProc(CWnd
*
?pWnd,?HWND?hWnd,?UINT?nMsg,
197
???????????????????????WPARAM?wParam,?LPARAM?lParam)
198
{
199
??cout?
<<
?
"
AfxCallWndProc()
"
?
<<
?endl;
200
??LRESULT?lResult?
=
?pWnd
->
WindowProc(nMsg,?wParam,?lParam);
201
??
return
?lResult;
202
}
203


??2

??3

??4

??5

??6

??7



??8

??9

?10

?11

?12

?13

?14



?15

?16

?17

?18

?19

?20

?21

?22

?23



?24

?25

?26

?27

?28

?29



?30

?31

?32

?33

?34

?35

?36



?37

?38

?39

?40

?41

?42



?43

?44

?45

?46

?47

?48



?49

?50

?51

?52

?53

?54

?55

?56

?57

?58

?59



?60

?61

?62

?63

?64

?65

?66

?67

?68

?69



?70

?71

?72

?73

?74

?75



?76

?77


?78

?79

?80

?81

?82



?83

?84


?85

?86

?87

?88

?89

?90



?91

?92

?93

?94

?95

?96

?97



?98

?99

100

101

102

103



104

105

106

107

108

109



110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129



130

131

132

133

134

135

136

137

138



139

140

141

142

143

144

145

146

147

148

149



150

151

152

153

154



155

156

157

158

159

160



161



162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185



186

187

188

189

190

191



192

193

194

195

196

197

198



199

200

201

202

203

?1
#include?
"
my.h
"
?2
?3
CMyWinApp?theApp;??
//
?global?object
?4
?5
BOOL?CMyWinApp::InitInstance()
?6
{
?7
????cout?
<<
?
"
CMyWinApp::InitInstance?\n
"
;
?8
????m_pMainWnd?
=
?
new
?CMyFrameWnd;
?9
????
return
?TRUE;
10
}
11
12
CMyFrameWnd::CMyFrameWnd()
13
{
14
????Create();
15
}
16
17
BEGIN_MESSAGE_MAP(CMyWinApp,?CWinApp)
18
ON_COMMAND(CMyWinAppid,?
0
)
19
END_MESSAGE_MAP()
20
21
BEGIN_MESSAGE_MAP(CMyFrameWnd,?CFrameWnd)
22
ON_COMMAND(CMyFrameWndid,?
0
)
23
END_MESSAGE_MAP()
24
25
BEGIN_MESSAGE_MAP(CMyDoc,?CDocument)
26
ON_COMMAND(CMyDocid,?
0
)
27
END_MESSAGE_MAP()
28
29
BEGIN_MESSAGE_MAP(CMyView,?CView)
30
ON_COMMAND(CMyViewid,?
0
)
31
END_MESSAGE_MAP()
32
33
void
??printlpEntries(AFX_MSGMAP_ENTRY
*
?lpEntry)
34
{
35
struct
?
{
36
??
int
?classid;
37
??
char
*
?classname;
38
}
?classinfo[]?
=
?
{
39
????????????????????CCmdTargetid?,??
"
CCmdTarget???
"
,
40
????????????????????CWinThreadid?,??
"
CWinThread???
"
,
41
????????????????????CWinAppid????,??
"
CWinApp??????
"
,
42
????????????????????CMyWinAppid??,??
"
CMyWinApp????
"
,
43
????????????????????CWndid???????,??
"
CWnd?????????
"
,
44
????????????????????CFrameWndid??,??
"
CFrameWnd????
"
,
45
????????????????????CMyFrameWndid,??
"
CMyFrameWnd??
"
,
46
????????????????????CViewid??????,??
"
CView????????
"
,
47
????????????????????CMyViewid????,??
"
CMyView??????
"
,
48
????????????????????CDocumentid??,??
"
CDocument????
"
,
49
????????????????????CMyDocid?????,??
"
CMyDoc???????
"
,
50
????????????????????
0
????????????,??
"
?????????????
"
51
????????????????}
;
52
53
????
for
?(
int
?i
=
0
;?classinfo[i].classid?
!=
?
0
;?i
++
)
54
????
{
55
????????
if
?(classinfo[i].classid?
==
?lpEntry
->
nID)
56
????????
{
57
????????????cout?
<<
?lpEntry
->
nID?
<<
?
"
????
"
;
58
????????????cout?
<<
?classinfo[i].classname?
<<
?endl;
59
????????????
break
;
60
????????}
61
????}
62
}
63
//
------------------------------------------------------------------
64
//
?main
65
//
------------------------------------------------------------------
66
void
?main()
67
{
68
????CWinApp
*
?pApp?
=
?AfxGetApp();
69
70
????pApp
->
InitApplication();
71
????pApp
->
InitInstance();
72
????pApp
->
Run();
73
74
????CMyDoc
*
?pMyDoc?
=
?
new
?CMyDoc;
75
????CMyView
*
?pMyView?
=
?
new
?CMyView;
76
????CFrameWnd
*
?pMyFrame?
=
?(CFrameWnd
*
)pApp
->
m_pMainWnd;
77
????pMyFrame
->
m_pViewActive?
=
?pMyView;
78
????pMyView
->
m_pDocument?
=
?pMyDoc;
79
80
????
//
?test?Message?Routing
81
????cout?
<<
?endl?
<<
?
"
pMyFrame?receive?WM_CREATE,?
"
;
82
????cout?
<<
?
"
routing?path?and?call?stack:
"
?
<<
?endl;
83
????AfxWndProc(
0
,?WM_CREATE,?
0
,?
0
,?pMyFrame);
84
85
????cout?
<<
?endl?
<<
?
"
pMyView?receive?WM_PAINT,?
"
;
86
????cout?
<<
?
"
routing?path?and?call?stack:
"
?
<<
?endl;
87
????AfxWndProc(
0
,?WM_PAINT,?
0
,?
0
,?pMyView);
88
89
????cout?
<<
?endl?
<<
?
"
pMyView?receive?WM_COMMAND,?
"
;
90
????cout?
<<
?
"
routing?path?and?call?stack:
"
?
<<
?endl;
91
????AfxWndProc(
0
,?WM_COMMAND,?
0
,?
0
,?pMyView);
92
93
????cout?
<<
?endl?
<<
?
"
pMyFrame?receive?WM_COMMAND,?
"
;
94
????cout?
<<
?
"
routing?path?and?call?stack:
"
?
<<
?endl;
95
????AfxWndProc(
0
,?WM_COMMAND,?
0
,?
0
,?pMyFrame);
96
}
97

?2

?3

?4

?5

?6



?7

?8

?9

10

11

12

13



14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34



35



36

37

38



39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54



55

56



57

58

59

60

61

62

63

64

65

66

67



68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97
