0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78 #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 64 .h"..#include "d
0020: 65 76 5f 73 65 72 76 2e 68 22 0d 0a 0d 0a 76 6f ev_serv.h"....vo
0030: 69 64 20 44 6f 4d 73 67 4c 69 6e 65 28 4c 50 43 id DoMsgLine(LPC
0040: 53 54 52 20 66 6f 72 6d 61 74 2c 20 4d 65 73 73 STR format, Mess
0050: 61 67 65 4d 61 72 6b 65 72 20 6d 61 72 6b 65 72 ageMarker marker
0060: 2f 2a 3d 6d 6d 4e 6f 6e 65 2a 2f 2c 2e 2e 2e 29 /*=mmNone*/,...)
0070: 0d 0a 7b 0d 0a 09 76 61 5f 6c 69 73 74 20 61 72 ..{...va_list ar
0080: 67 3b 0d 0a 09 76 61 5f 73 74 61 72 74 28 61 72 g;...va_start(ar
0090: 67 2c 6d 61 72 6b 65 72 29 3b 0d 0a 09 43 53 74 g,marker);...CSt
00a0: 72 69 6e 67 20 74 78 74 3b 0d 0a 09 74 78 74 2e ring txt;...txt.
00b0: 46 6f 72 6d 61 74 56 28 66 6f 72 6d 61 74 2c 61 FormatV(format,a
00c0: 72 67 29 3b 0d 0a 09 70 42 6b 45 6e 64 55 49 2d rg);...pBkEndUI-
00d0: 3e 44 6f 4d 65 73 73 61 67 65 4c 69 6e 65 28 74 >DoMessageLine(t
00e0: 78 74 2c 6d 61 72 6b 65 72 29 3b 0d 0a 7d 0d 0a xt,marker);..}..
00f0: 0d 0a 76 6f 69 64 20 47 65 74 52 54 43 46 75 6c ..void GetRTCFul
0100: 6c 28 43 52 75 6e 74 69 6d 65 43 6c 61 73 73 2a l(CRuntimeClass*
0110: 20 72 74 63 2c 20 43 53 74 72 69 6e 67 26 20 53 rtc, CString& S
0120: 74 72 29 0d 0a 7b 0d 0a 20 20 20 20 69 66 20 28 tr)..{.. if (
0130: 72 74 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 rtc).. {..
0140: 20 20 20 20 20 53 74 72 2e 46 6f 72 6d 61 74 28 Str.Format(
0150: 22 25 73 25 73 25 73 28 25 58 68 2f 25 58 68 29 "%s%s%s(%Xh/%Xh)
0160: 22 2c 20 53 74 72 2c 20 22 3c 2d 22 2c 20 72 74 ", Str, "<-", rt
0170: 63 2d 3e 6d 5f 6c 70 73 7a 43 6c 61 73 73 4e 61 c->m_lpszClassNa
0180: 6d 65 2c 20 72 74 63 2d 3e 6d 5f 6e 4f 62 6a 65 me, rtc->m_nObje
0190: 63 74 53 69 7a 65 2c 20 72 74 63 2d 3e 6d 5f 6e ctSize, rtc->m_n
01a0: 4f 62 6a 65 63 74 53 69 7a 65 20 2d 20 28 72 74 ObjectSize - (rt
01b0: 63 2d 3e 6d 5f 70 66 6e 47 65 74 42 61 73 65 43 c->m_pfnGetBaseC
01c0: 6c 61 73 73 28 29 20 3f 20 72 74 63 2d 3e 6d 5f lass() ? rtc->m_
01d0: 70 66 6e 47 65 74 42 61 73 65 43 6c 61 73 73 28 pfnGetBaseClass(
01e0: 29 2d 3e 6d 5f 6e 4f 62 6a 65 63 74 53 69 7a 65 )->m_nObjectSize
01f0: 20 3a 20 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 : 0));..
0200: 20 47 65 74 52 54 43 46 75 6c 6c 28 72 74 63 2d GetRTCFull(rtc-
0210: 3e 6d 5f 70 66 6e 47 65 74 42 61 73 65 43 6c 61 >m_pfnGetBaseCla
0220: 73 73 28 29 2c 20 53 74 72 29 3b 0d 0a 20 20 20 ss(), Str);..
0230: 20 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 4d 65 }..}....void Me
0240: 73 73 61 67 65 46 75 6c 6c 52 54 43 28 43 4f 62 ssageFullRTC(COb
0250: 6a 65 63 74 2a 20 6f 62 6a 2c 20 43 53 74 72 69 ject* obj, CStri
0260: 6e 67 20 49 6e 64 65 6e 74 2f 2a 3d 22 22 2a 2f ng Indent/*=""*/
0270: 29 0d 0a 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 )..{.. if
0280: 20 28 6f 62 6a 29 0d 0a 09 09 09 4d 65 73 73 61 (obj).....Messa
0290: 67 65 46 75 6c 6c 52 54 43 28 6f 62 6a 2d 3e 47 geFullRTC(obj->G
02a0: 65 74 52 75 6e 74 69 6d 65 43 6c 61 73 73 28 29 etRuntimeClass()
02b0: 2c 20 49 6e 64 65 6e 74 29 3b 0d 0a 7d 0d 0a 0d , Indent);..}...
02c0: 0a 76 6f 69 64 20 4d 65 73 73 61 67 65 46 75 6c .void MessageFul
02d0: 6c 52 54 43 28 43 52 75 6e 74 69 6d 65 43 6c 61 lRTC(CRuntimeCla
02e0: 73 73 2a 20 72 74 63 2c 20 43 53 74 72 69 6e 67 ss* rtc, CString
02f0: 20 49 6e 64 65 6e 74 2f 2a 3d 22 22 2a 2f 29 0d Indent/*=""*/).
0300: 0a 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 .{.. if (
0310: 72 74 63 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d rtc).. {.
0320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0330: 20 43 53 74 72 69 6e 67 20 53 74 72 3b 0d 0a 20 CString Str;..
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 G
0350: 65 74 52 54 43 46 75 6c 6c 28 72 74 63 2c 20 53 etRTCFull(rtc, S
0360: 74 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 tr);..
0370: 20 20 20 20 20 20 44 6f 4d 73 67 4c 69 6e 65 28 DoMsgLine(
0380: 22 25 73 25 73 22 2c 20 6d 6d 4e 6f 6e 65 2c 20 "%s%s", mmNone,
0390: 49 6e 64 65 6e 74 2c 20 53 74 72 29 3b 0d 0a 20 Indent, Str);..
03a0: 20 20 20 20 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 76 }..}....v
03b0: 6f 69 64 20 54 72 61 63 65 50 72 6f 66 69 6c 65 oid TraceProfile
03c0: 28 43 50 72 6f 66 69 6c 65 37 2a 20 70 50 72 6f (CProfile7* pPro
03d0: 66 2c 20 43 53 74 72 69 6e 67 20 49 6e 64 65 6e f, CString Inden
03e0: 74 29 0d 0a 7b 0d 0a 20 20 20 20 20 20 20 20 69 t)..{.. i
03f0: 66 20 28 21 70 50 72 6f 66 29 0d 0a 20 20 20 20 f (!pProf)..
0400: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
0410: 20 20 20 20 20 20 20 43 41 70 70 37 2a 20 70 41 CApp7* pA
0420: 70 70 37 20 3d 20 28 43 41 70 70 37 2a 29 41 66 pp7 = (CApp7*)Af
0430: 78 47 65 74 41 70 70 28 29 3b 0d 0a 20 20 20 20 xGetApp();..
0440: 20 20 20 20 20 20 20 20 20 20 20 20 70 50 72 6f pPro
0450: 66 20 3d 20 70 41 70 70 37 2d 3e 47 65 74 50 72 f = pApp7->GetPr
0460: 6f 70 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 ops();..
0470: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 6f 4d }.... DoM
0480: 73 67 4c 69 6e 65 28 22 25 73 25 73 20 23 20 25 sgLine("%s%s # %
0490: 73 20 23 20 25 64 22 2c 20 6d 6d 4e 6f 6e 65 2c s # %d", mmNone,
04a0: 20 49 6e 64 65 6e 74 2c 20 70 50 72 6f 66 2d 3e Indent, pProf->
04b0: 6d 5f 73 74 72 4b 65 79 2c 20 70 50 72 6f 66 2d m_strKey, pProf-
04c0: 3e 6d 5f 73 74 72 50 61 74 68 2c 20 70 50 72 6f >m_strPath, pPro
04d0: 66 2d 3e 47 65 74 45 6e 74 72 79 43 6f 75 6e 74 f->GetEntryCount
04e0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 53 ());.. CS
04f0: 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20 20 20 tring str;..
0500: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 3d 30 for (int i=0
0510: 3b 20 69 3c 70 50 72 6f 66 2d 3e 47 65 74 45 6e ; i<pProf->GetEn
0520: 74 72 79 43 6f 75 6e 74 28 29 3b 20 69 2b 2b 29 tryCount(); i++)
0530: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 .. {..
0540: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 43 ((C
0550: 50 72 6f 66 69 6c 65 37 5f 2a 29 70 50 72 6f 66 Profile7_*)pProf
0560: 29 2d 3e 50 72 6f 70 54 6f 53 74 72 69 6e 67 28 )->PropToString(
0570: 69 2c 20 73 74 72 29 3b 0d 0a 20 20 20 20 20 20 i, str);..
0580: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 const
0590: 43 50 72 6f 66 69 6c 65 45 6e 74 72 79 37 2a 20 CProfileEntry7*
05a0: 70 50 45 20 3d 20 70 50 72 6f 66 2d 3e 47 65 74 pPE = pProf->Get
05b0: 45 6e 74 72 79 41 74 28 69 29 3b 0d 0a 20 20 20 EntryAt(i);..
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 6f 4d DoM
05d0: 73 67 4c 69 6e 65 28 22 25 73 25 73 5b 25 64 5d sgLine("%s%s[%d]
05e0: 20 25 64 20 25 73 3a 20 25 73 22 2c 20 6d 6d 4e %d %s: %s", mmN
05f0: 6f 6e 65 2c 22 20 22 2c 49 6e 64 65 6e 74 2c 20 one," ",Indent,
0600: 69 2c 20 70 50 45 2d 3e 74 79 70 65 2c 20 70 50 i, pPE->type, pP
0610: 45 2d 3e 45 6e 74 72 79 4e 61 6d 65 2c 20 73 74 E->EntryName, st
0620: 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a r);.. }..
0630: 0d 0a 20 20 20 20 20 20 20 20 50 4f 53 49 54 49 .. POSITI
0640: 4f 4e 20 70 6f 73 20 3d 20 70 50 72 6f 66 2d 3e ON pos = pProf->
0650: 47 65 74 46 69 72 73 74 50 72 6f 66 69 6c 65 28 GetFirstProfile(
0660: 29 3b 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c );.. whil
0670: 65 28 70 6f 73 29 0d 0a 20 20 20 20 20 20 20 20 e(pos)..
0680: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 6f TracePro
0690: 66 69 6c 65 28 70 50 72 6f 66 2d 3e 47 65 74 4e file(pProf->GetN
06a0: 65 78 74 50 72 6f 66 69 6c 65 28 70 6f 73 29 2c extProfile(pos),
06b0: 20 49 6e 64 65 6e 74 2b 22 20 20 22 29 3b 0d 0a Indent+" ");..
06c0: 7d 0d 0a 0d 0a 76 6f 69 64 20 54 72 61 63 65 57 }....void TraceW
06d0: 69 6e 64 6f 77 73 28 43 57 6e 64 2a 20 70 57 6e indows(CWnd* pWn
06e0: 64 2c 20 42 4f 4f 4c 20 62 57 69 74 68 4d 73 67 d, BOOL bWithMsg
06f0: 4d 61 70 2c 20 55 49 4e 54 20 6e 4d 65 73 73 61 Map, UINT nMessa
0700: 67 65 46 69 6c 74 65 72 2c 20 55 49 4e 54 20 6e geFilter, UINT n
0710: 49 44 46 69 6c 74 65 72 2c 20 43 53 74 72 69 6e IDFilter, CStrin
0720: 67 20 49 6e 64 65 6e 74 29 0d 0a 7b 0d 0a 20 20 g Indent)..{..
0730: 20 20 20 20 20 20 43 53 74 72 69 6e 67 20 53 74 CString St
0740: 72 3b 0d 0a 20 20 20 20 20 20 20 20 47 65 74 52 r;.. GetR
0750: 54 43 46 75 6c 6c 28 70 57 6e 64 2d 3e 47 65 74 TCFull(pWnd->Get
0760: 52 75 6e 74 69 6d 65 43 6c 61 73 73 28 29 2c 20 RuntimeClass(),
0770: 53 74 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 44 Str);.. D
0780: 6f 4d 73 67 4c 69 6e 65 28 22 25 73 28 25 58 29 oMsgLine("%s(%X)
0790: 25 73 22 2c 20 6d 6d 4e 6f 6e 65 2c 20 49 6e 64 %s", mmNone, Ind
07a0: 65 6e 74 2c 20 70 57 6e 64 2d 3e 6d 5f 68 57 6e ent, pWnd->m_hWn
07b0: 64 2c 20 53 74 72 29 3b 0d 0a 09 09 0d 0a 09 09 d, Str);........
07c0: 69 66 20 28 62 57 69 74 68 4d 73 67 4d 61 70 29 if (bWithMsgMap)
07d0: 0d 0a 09 09 09 54 72 61 63 65 4d 65 73 73 61 67 .....TraceMessag
07e0: 65 4d 61 70 28 70 57 6e 64 2c 20 6e 4d 65 73 73 eMap(pWnd, nMess
07f0: 61 67 65 46 69 6c 74 65 72 2c 20 6e 49 44 46 69 ageFilter, nIDFi
0800: 6c 74 65 72 2c 49 6e 64 65 6e 74 29 3b 0d 0a 0d lter,Indent);...
0810: 0a 09 09 69 66 20 28 70 57 6e 64 2d 3e 49 73 4b ...if (pWnd->IsK
0820: 69 6e 64 4f 66 28 52 55 4e 54 49 4d 45 5f 43 4c indOf(RUNTIME_CL
0830: 41 53 53 28 43 56 69 65 77 29 29 29 0d 0a 09 09 ASS(CView)))....
0840: 7b 0d 0a 09 09 09 43 56 69 65 77 2a 20 70 56 69 {.....CView* pVi
0850: 65 77 20 3d 20 28 43 56 69 65 77 2a 29 70 57 6e ew = (CView*)pWn
0860: 64 3b 0d 0a 09 09 09 53 74 72 2e 45 6d 70 74 79 d;.....Str.Empty
0870: 28 29 3b 0d 0a 09 09 09 47 65 74 52 54 43 46 75 ();.....GetRTCFu
0880: 6c 6c 28 70 56 69 65 77 2d 3e 47 65 74 50 61 72 ll(pView->GetPar
0890: 65 6e 74 46 72 61 6d 65 28 29 2d 3e 47 65 74 52 entFrame()->GetR
08a0: 75 6e 74 69 6d 65 43 6c 61 73 73 28 29 2c 20 53 untimeClass(), S
08b0: 74 72 29 3b 0d 0a 09 20 20 20 20 20 20 20 20 44 tr);... D
08c0: 6f 4d 73 67 4c 69 6e 65 28 22 25 73 28 25 58 29 oMsgLine("%s(%X)
08d0: 28 46 72 61 6d 65 3a 25 73 29 22 2c 20 6d 6d 4e (Frame:%s)", mmN
08e0: 6f 6e 65 2c 20 49 6e 64 65 6e 74 2c 20 70 56 69 one, Indent, pVi
08f0: 65 77 2d 3e 47 65 74 50 61 72 65 6e 74 46 72 61 ew->GetParentFra
0900: 6d 65 28 29 2d 3e 6d 5f 68 57 6e 64 2c 20 53 74 me()->m_hWnd, St
0910: 72 29 3b 0d 0a 09 09 09 53 74 72 2e 45 6d 70 74 r);.....Str.Empt
0920: 79 28 29 3b 0d 0a 09 09 09 47 65 74 52 54 43 46 y();.....GetRTCF
0930: 75 6c 6c 28 70 56 69 65 77 2d 3e 47 65 74 44 6f ull(pView->GetDo
0940: 63 75 6d 65 6e 74 28 29 2d 3e 47 65 74 52 75 6e cument()->GetRun
0950: 74 69 6d 65 43 6c 61 73 73 28 29 2c 20 53 74 72 timeClass(), Str
0960: 29 3b 0d 0a 09 20 20 20 20 20 20 20 20 44 6f 4d );... DoM
0970: 73 67 4c 69 6e 65 28 22 25 73 28 44 6f 63 75 6d sgLine("%s(Docum
0980: 65 6e 74 3a 25 73 29 22 2c 20 6d 6d 4e 6f 6e 65 ent:%s)", mmNone
0990: 2c 20 49 6e 64 65 6e 74 2c 20 53 74 72 29 3b 0d , Indent, Str);.
09a0: 0a 09 09 09 69 66 20 28 62 57 69 74 68 4d 73 67 ....if (bWithMsg
09b0: 4d 61 70 29 0d 0a 09 09 09 09 54 72 61 63 65 4d Map)......TraceM
09c0: 65 73 73 61 67 65 4d 61 70 28 70 56 69 65 77 2d essageMap(pView-
09d0: 3e 47 65 74 44 6f 63 75 6d 65 6e 74 28 29 2c 20 >GetDocument(),
09e0: 6e 4d 65 73 73 61 67 65 46 69 6c 74 65 72 2c 20 nMessageFilter,
09f0: 6e 49 44 46 69 6c 74 65 72 2c 20 49 6e 64 65 6e nIDFilter, Inden
0a00: 74 29 3b 0d 0a 09 09 7d 3b 0d 0a 20 20 20 20 20 t);....};..
0a10: 20 20 20 66 6f 72 20 28 70 57 6e 64 20 3d 20 70 for (pWnd = p
0a20: 57 6e 64 2d 3e 47 65 74 57 69 6e 64 6f 77 28 47 Wnd->GetWindow(G
0a30: 57 5f 43 48 49 4c 44 29 3b 20 70 57 6e 64 3b 20 W_CHILD); pWnd;
0a40: 70 57 6e 64 20 3d 20 70 57 6e 64 2d 3e 47 65 74 pWnd = pWnd->Get
0a50: 57 69 6e 64 6f 77 28 47 57 5f 48 57 4e 44 4e 45 Window(GW_HWNDNE
0a60: 58 54 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 XT))..
0a70: 20 20 20 20 20 20 54 72 61 63 65 57 69 6e 64 6f TraceWindo
0a80: 77 73 28 70 57 6e 64 2c 20 62 57 69 74 68 4d 73 ws(pWnd, bWithMs
0a90: 67 4d 61 70 2c 20 6e 4d 65 73 73 61 67 65 46 69 gMap, nMessageFi
0aa0: 6c 74 65 72 2c 20 6e 49 44 46 69 6c 74 65 72 2c lter, nIDFilter,
0ab0: 20 49 6e 64 65 6e 74 2b 22 20 20 22 29 3b 0d 0a Indent+" ");..
0ac0: 7d 0d 0a 0d 0a 76 6f 69 64 20 54 72 61 63 65 4d }....void TraceM
0ad0: 65 6e 75 28 43 4d 65 6e 75 2a 20 4d 65 6e 75 2c enu(CMenu* Menu,
0ae0: 20 43 53 74 72 69 6e 67 20 49 6e 64 65 6e 74 29 CString Indent)
0af0: 0d 0a 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ..{.. if
0b00: 28 4d 65 6e 75 29 0d 0a 20 20 20 20 20 20 20 20 (Menu)..
0b10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
0b20: 20 20 20 43 53 74 72 69 6e 67 20 73 74 72 3b 0d CString str;.
0b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0b40: 20 4d 45 4e 55 49 54 45 4d 49 4e 46 4f 20 6d 69 MENUITEMINFO mi
0b50: 69 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 i;..
0b60: 20 20 20 20 66 6f 72 20 28 55 49 4e 54 20 69 3d for (UINT i=
0b70: 30 3b 20 69 20 3c 20 4d 65 6e 75 2d 3e 47 65 74 0; i < Menu->Get
0b80: 4d 65 6e 75 49 74 65 6d 43 6f 75 6e 74 28 29 3b MenuItemCount();
0b90: 20 69 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 i++)..
0ba0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
0bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0bc0: 20 20 4d 65 6e 75 2d 3e 47 65 74 4d 65 6e 75 53 Menu->GetMenuS
0bd0: 74 72 69 6e 67 28 69 2c 20 73 74 72 2c 20 4d 46 tring(i, str, MF
0be0: 5f 42 59 50 4f 53 49 54 49 4f 4e 29 3b 0d 0a 20 _BYPOSITION);..
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c00: 20 20 20 20 20 20 20 44 57 4f 52 44 20 69 64 20 DWORD id
0c10: 3d 20 4d 65 6e 75 2d 3e 47 65 74 4d 65 6e 75 49 = Menu->GetMenuI
0c20: 74 65 6d 49 44 28 69 29 3b 0d 0a 20 20 20 20 20 temID(i);..
0c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c40: 20 20 20 4d 65 6e 75 2d 3e 47 65 74 4d 65 6e 75 Menu->GetMenu
0c50: 49 74 65 6d 49 6e 66 6f 28 69 2c 20 26 6d 69 69 ItemInfo(i, &mii
0c60: 2c 20 4d 46 5f 42 59 50 4f 53 49 54 49 4f 4e 29 , MF_BYPOSITION)
0c70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
0c80: 20 20 20 20 20 20 20 20 20 20 20 44 6f 4d 73 67 DoMsg
0c90: 4c 69 6e 65 28 22 25 73 25 30 38 58 20 25 30 38 Line("%s%08X %08
0ca0: 58 20 25 73 22 2c 20 6d 6d 4e 6f 6e 65 2c 20 49 X %s", mmNone, I
0cb0: 6e 64 65 6e 74 2c 20 69 64 2c 20 6d 69 69 2e 66 ndent, id, mii.f
0cc0: 53 74 61 74 65 2c 20 73 74 72 29 3b 0d 0a 20 20 State, str);..
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ce0: 20 20 20 20 20 20 54 72 61 63 65 4d 65 6e 75 28 TraceMenu(
0cf0: 4d 65 6e 75 2d 3e 47 65 74 53 75 62 4d 65 6e 75 Menu->GetSubMenu
0d00: 28 69 29 2c 20 49 6e 64 65 6e 74 2b 22 20 20 22 (i), Indent+" "
0d10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
0d20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. }
0d30: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 54 72 61 63 ..}....void Trac
0d40: 65 4d 65 73 73 61 67 65 4d 61 70 28 63 6f 6e 73 eMessageMap(cons
0d50: 74 20 41 46 58 5f 4d 53 47 4d 41 50 2a 20 70 4d t AFX_MSGMAP* pM
0d60: 53 47 4d 41 50 2c 20 55 49 4e 54 20 6e 4d 65 73 SGMAP, UINT nMes
0d70: 73 61 67 65 46 69 6c 74 65 72 2c 20 55 49 4e 54 sageFilter, UINT
0d80: 20 6e 49 44 46 69 6c 74 65 72 2c 20 43 53 74 72 nIDFilter, CStr
0d90: 69 6e 67 20 49 6e 64 65 6e 74 29 0d 0a 7b 0d 0a ing Indent)..{..
0da0: 09 69 66 20 28 70 4d 53 47 4d 41 50 29 0d 0a 09 .if (pMSGMAP)...
0db0: 7b 0d 0a 09 09 63 6f 6e 73 74 20 41 46 58 5f 4d {....const AFX_M
0dc0: 53 47 4d 41 50 5f 45 4e 54 52 59 2a 20 6c 70 45 SGMAP_ENTRY* lpE
0dd0: 6e 74 72 69 65 73 20 3d 20 70 4d 53 47 4d 41 50 ntries = pMSGMAP
0de0: 2d 3e 6c 70 45 6e 74 72 69 65 73 3b 0d 0a 09 09 ->lpEntries;....
0df0: 77 68 69 6c 65 20 28 6c 70 45 6e 74 72 69 65 73 while (lpEntries
0e00: 2d 3e 6e 4d 65 73 73 61 67 65 29 0d 0a 09 09 7b ->nMessage)....{
0e10: 0d 0a 09 09 09 69 66 20 28 21 6e 4d 65 73 73 61 .....if (!nMessa
0e20: 67 65 46 69 6c 74 65 72 20 7c 7c 20 6e 4d 65 73 geFilter || nMes
0e30: 73 61 67 65 46 69 6c 74 65 72 20 3d 3d 20 6c 70 sageFilter == lp
0e40: 45 6e 74 72 69 65 73 2d 3e 6e 4d 65 73 73 61 67 Entries->nMessag
0e50: 65 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 e).....{......if
0e60: 20 28 21 6e 49 44 46 69 6c 74 65 72 20 7c 7c 20 (!nIDFilter ||
0e70: 6e 49 44 46 69 6c 74 65 72 3e 3d 6c 70 45 6e 74 nIDFilter>=lpEnt
0e80: 72 69 65 73 2d 3e 6e 49 44 20 26 26 20 6e 49 44 ries->nID && nID
0e90: 46 69 6c 74 65 72 3c 3d 6c 70 45 6e 74 72 69 65 Filter<=lpEntrie
0ea0: 73 2d 3e 6e 4c 61 73 74 49 44 29 0d 0a 09 09 09 s->nLastID).....
0eb0: 09 7b 0d 0a 09 09 09 09 09 44 6f 4d 73 67 4c 69 .{.......DoMsgLi
0ec0: 6e 65 28 22 25 73 4d 65 73 73 61 67 65 3a 25 30 ne("%sMessage:%0
0ed0: 38 58 20 43 6f 64 65 3a 25 30 38 58 20 49 44 3a 8X Code:%08X ID:
0ee0: 25 30 38 58 20 4c 61 73 74 49 44 3a 25 30 38 58 %08X LastID:%08X
0ef0: 20 53 69 67 3a 25 30 38 58 22 2c 20 6d 6d 4e 6f Sig:%08X", mmNo
0f00: 6e 65 2c 20 49 6e 64 65 6e 74 2c 0d 0a 09 09 09 ne, Indent,.....
0f10: 09 09 09 6c 70 45 6e 74 72 69 65 73 2d 3e 6e 4d ...lpEntries->nM
0f20: 65 73 73 61 67 65 2c 20 6c 70 45 6e 74 72 69 65 essage, lpEntrie
0f30: 73 2d 3e 6e 43 6f 64 65 2c 20 6c 70 45 6e 74 72 s->nCode, lpEntr
0f40: 69 65 73 2d 3e 6e 49 44 2c 20 6c 70 45 6e 74 72 ies->nID, lpEntr
0f50: 69 65 73 2d 3e 6e 4c 61 73 74 49 44 2c 20 6c 70 ies->nLastID, lp
0f60: 45 6e 74 72 69 65 73 2d 3e 6e 53 69 67 29 3b 0d Entries->nSig);.
0f70: 0a 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 .....}.....}....
0f80: 09 6c 70 45 6e 74 72 69 65 73 2b 2b 3b 0d 0a 09 .lpEntries++;...
0f90: 09 7d 0d 0a 09 09 54 72 61 63 65 4d 65 73 73 61 .}....TraceMessa
0fa0: 67 65 4d 61 70 28 70 4d 53 47 4d 41 50 2d 3e 70 geMap(pMSGMAP->p
0fb0: 66 6e 47 65 74 42 61 73 65 4d 61 70 28 29 2c 20 fnGetBaseMap(),
0fc0: 6e 4d 65 73 73 61 67 65 46 69 6c 74 65 72 2c 20 nMessageFilter,
0fd0: 6e 49 44 46 69 6c 74 65 72 2c 20 49 6e 64 65 6e nIDFilter, Inden
0fe0: 74 2b 22 20 20 22 29 3b 0d 0a 09 7d 0d 0a 7d 0d t+" ");...}..}.
0ff0: 0a 0d 0a 76 6f 69 64 20 54 72 61 63 65 4d 65 73 ...void TraceMes
1000: 73 61 67 65 4d 61 70 28 43 43 6d 64 54 61 72 67 sageMap(CCmdTarg
1010: 65 74 2a 20 70 54 61 72 67 65 74 2c 20 55 49 4e et* pTarget, UIN
1020: 54 20 6e 4d 65 73 73 61 67 65 46 69 6c 74 65 72 T nMessageFilter
1030: 2c 20 55 49 4e 54 20 6e 49 44 46 69 6c 74 65 72 , UINT nIDFilter
1040: 2c 20 43 53 74 72 69 6e 67 20 49 6e 64 65 6e 74 , CString Indent
1050: 29 0d 0a 7b 0d 0a 09 63 6c 61 73 73 20 43 43 6d )..{...class CCm
1060: 64 54 61 72 67 65 74 5f 20 3a 20 70 75 62 6c 69 dTarget_ : publi
1070: 63 20 43 43 6d 64 54 61 72 67 65 74 0d 0a 09 7b c CCmdTarget...{
1080: 0d 0a 09 09 66 72 69 65 6e 64 20 76 6f 69 64 20 ....friend void
1090: 54 72 61 63 65 4d 65 73 73 61 67 65 4d 61 70 28 TraceMessageMap(
10a0: 43 43 6d 64 54 61 72 67 65 74 2a 20 70 54 61 72 CCmdTarget* pTar
10b0: 67 65 74 2c 20 55 49 4e 54 20 6e 4d 65 73 73 61 get, UINT nMessa
10c0: 67 65 46 69 6c 74 65 72 2c 20 55 49 4e 54 20 6e geFilter, UINT n
10d0: 49 44 46 69 6c 74 65 72 2c 20 43 53 74 72 69 6e IDFilter, CStrin
10e0: 67 20 49 6e 64 65 6e 74 29 3b 0d 0a 09 7d 3b 0d g Indent);...};.
10f0: 0a 09 69 66 20 28 70 54 61 72 67 65 74 29 0d 0a ..if (pTarget)..
1100: 09 09 54 72 61 63 65 4d 65 73 73 61 67 65 4d 61 ..TraceMessageMa
1110: 70 28 28 28 43 43 6d 64 54 61 72 67 65 74 5f 2a p(((CCmdTarget_*
1120: 29 70 54 61 72 67 65 74 29 2d 3e 47 65 74 4d 65 )pTarget)->GetMe
1130: 73 73 61 67 65 4d 61 70 28 29 2c 20 6e 4d 65 73 ssageMap(), nMes
1140: 73 61 67 65 46 69 6c 74 65 72 2c 20 6e 49 44 46 sageFilter, nIDF
1150: 69 6c 74 65 72 2c 20 49 6e 64 65 6e 74 29 3b 0d ilter, Indent);.
1160: 0a 7d 0d 0a 0d 0a 0d 0a 76 6f 69 64 20 54 72 61 .}......void Tra
1170: 63 65 42 4c 43 6f 6e 74 65 78 74 28 43 42 4c 43 ceBLContext(CBLC
1180: 6f 6e 74 65 78 74 2a 20 70 42 4c 43 2c 20 43 53 ontext* pBLC, CS
1190: 74 72 69 6e 67 20 49 6e 64 65 6e 74 29 0d 0a 7b tring Indent)..{
11a0: 0d 0a 09 4d 65 73 73 61 67 65 46 75 6c 6c 52 54 ...MessageFullRT
11b0: 43 28 70 42 4c 43 2c 20 49 6e 64 65 6e 74 29 3b C(pBLC, Indent);
11c0: 0d 0a 09 49 6e 64 65 6e 74 20 2b 3d 20 22 20 20 ...Indent += "
11d0: 22 3b 0d 0a 09 44 6f 4d 73 67 4c 69 6e 65 28 22 ";...DoMsgLine("
11e0: 25 73 4e 50 72 6f 70 73 3a 25 64 20 4e 4d 65 74 %sNProps:%d NMet
11f0: 68 6f 64 73 3a 25 64 22 2c 20 6d 6d 4e 6f 6e 65 hods:%d", mmNone
1200: 2c 49 6e 64 65 6e 74 2c 20 70 42 4c 43 2d 3e 47 ,Indent, pBLC->G
1210: 65 74 4e 50 72 6f 70 73 28 29 2c 20 70 42 4c 43 etNProps(), pBLC
1220: 2d 3e 47 65 74 4e 4d 65 74 68 6f 64 73 28 29 29 ->GetNMethods())
1230: 3b 0d 0a 09 69 6e 74 20 69 3b 0d 0a 09 66 6f 72 ;...int i;...for
1240: 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 70 42 4c (i = 0; i < pBL
1250: 43 2d 3e 47 65 74 4e 50 72 6f 70 73 28 29 3b 20 C->GetNProps();
1260: 69 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 44 6f 4d 73 i++)...{....DoMs
1270: 67 4c 69 6e 65 28 22 25 73 25 30 32 64 20 25 73 gLine("%s%02d %s
1280: 25 73 20 25 73 2f 25 73 22 2c 20 6d 6d 4e 6f 6e %s %s/%s", mmNon
1290: 65 2c 0d 0a 09 09 09 49 6e 64 65 6e 74 2b 22 20 e,.....Indent+"
12a0: 20 22 2c 0d 0a 09 09 09 69 2c 0d 0a 09 09 09 70 ",.....i,.....p
12b0: 42 4c 43 2d 3e 49 73 50 72 6f 70 52 65 61 64 61 BLC->IsPropReada
12c0: 62 6c 65 28 69 29 3f 22 72 22 3a 22 22 2c 0d 0a ble(i)?"r":"",..
12d0: 09 09 09 70 42 4c 43 2d 3e 49 73 50 72 6f 70 57 ...pBLC->IsPropW
12e0: 72 69 74 61 62 6c 65 28 69 29 3f 22 77 22 3a 22 ritable(i)?"w":"
12f0: 22 2c 0d 0a 09 09 09 70 42 4c 43 2d 3e 47 65 74 ",.....pBLC->Get
1300: 50 72 6f 70 4e 61 6d 65 28 69 2c 30 29 2c 0d 0a PropName(i,0),..
1310: 09 09 09 70 42 4c 43 2d 3e 47 65 74 50 72 6f 70 ...pBLC->GetProp
1320: 4e 61 6d 65 28 69 2c 31 29 0d 0a 09 09 09 29 3b Name(i,1).....);
1330: 0d 0a 09 7d 0d 0a 09 66 6f 72 20 28 69 20 3d 20 ...}...for (i =
1340: 30 3b 20 69 20 3c 20 70 42 4c 43 2d 3e 47 65 74 0; i < pBLC->Get
1350: 4e 4d 65 74 68 6f 64 73 28 29 3b 20 69 2b 2b 29 NMethods(); i++)
1360: 0d 0a 09 7b 0d 0a 09 09 44 6f 4d 73 67 4c 69 6e ...{....DoMsgLin
1370: 65 28 22 25 73 25 30 32 64 20 25 73 20 25 73 2f e("%s%02d %s %s/
1380: 25 73 28 25 64 29 22 2c 20 6d 6d 4e 6f 6e 65 2c %s(%d)", mmNone,
1390: 0d 0a 09 09 09 49 6e 64 65 6e 74 2b 22 20 20 22 .....Indent+" "
13a0: 2c 0d 0a 09 09 09 69 2c 0d 0a 09 09 09 70 42 4c ,.....i,.....pBL
13b0: 43 2d 3e 48 61 73 52 65 74 56 61 6c 28 69 29 3f C->HasRetVal(i)?
13c0: 22 3d 22 3a 22 20 22 2c 0d 0a 09 09 09 70 42 4c "=":" ",.....pBL
13d0: 43 2d 3e 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 C->GetMethodName
13e0: 28 69 2c 30 29 2c 0d 0a 09 09 09 70 42 4c 43 2d (i,0),.....pBLC-
13f0: 3e 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 69 >GetMethodName(i
1400: 2c 31 29 2c 0d 0a 09 09 09 70 42 4c 43 2d 3e 47 ,1),.....pBLC->G
1410: 65 74 4e 50 61 72 61 6d 73 28 69 29 0d 0a 09 09 etNParams(i)....
1420: 09 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f .);...}..}....vo
1430: 69 64 20 54 72 61 63 65 47 43 28 43 42 4c 43 6f id TraceGC(CBLCo
1440: 6e 74 65 78 74 2a 20 70 42 4c 43 2c 20 43 53 74 ntext* pBLC, CSt
1450: 72 69 6e 67 20 49 6e 64 65 6e 74 2c 20 42 4f 4f ring Indent, BOO
1460: 4c 20 44 65 74 61 69 6c 29 0d 0a 7b 0d 0a 09 69 L Detail)..{...i
1470: 66 20 28 70 42 4c 43 29 0d 0a 09 7b 0d 0a 09 09 f (pBLC)...{....
1480: 43 52 75 6e 74 69 6d 65 43 6c 61 73 73 2a 20 70 CRuntimeClass* p
1490: 52 54 43 20 3d 20 70 42 4c 43 2d 3e 47 65 74 52 RTC = pBLC->GetR
14a0: 75 6e 74 69 6d 65 43 6c 61 73 73 28 29 3b 0d 0a untimeClass();..
14b0: 09 09 69 66 20 28 70 52 54 43 20 3d 3d 20 52 55 ..if (pRTC == RU
14c0: 4e 54 49 4d 45 5f 43 4c 41 53 53 28 43 47 72 6f NTIME_CLASS(CGro
14d0: 75 70 43 6f 6e 74 65 78 74 29 20 7c 7c 20 21 73 upContext) || !s
14e0: 74 72 63 6d 70 28 22 43 41 75 74 6f 47 72 6f 75 trcmp("CAutoGrou
14f0: 70 43 6f 6e 74 65 78 74 22 2c 20 70 42 4c 43 2d pContext", pBLC-
1500: 3e 47 65 74 52 75 6e 74 69 6d 65 43 6c 61 73 73 >GetRuntimeClass
1510: 28 29 2d 3e 6d 5f 6c 70 73 7a 43 6c 61 73 73 4e ()->m_lpszClassN
1520: 61 6d 65 29 29 0d 0a 09 09 7b 0d 0a 09 09 09 43 ame))....{.....C
1530: 47 72 6f 75 70 43 6f 6e 74 65 78 74 2a 20 70 47 GroupContext* pG
1540: 43 20 3d 20 28 43 47 72 6f 75 70 43 6f 6e 74 65 C = (CGroupConte
1550: 78 74 2a 29 70 42 4c 43 3b 0d 0a 09 09 09 4d 65 xt*)pBLC;.....Me
1560: 73 73 61 67 65 46 75 6c 6c 52 54 43 28 70 42 4c ssageFullRTC(pBL
1570: 43 2c 20 49 6e 64 65 6e 74 29 3b 0d 0a 09 09 09 C, Indent);.....
1580: 49 6e 64 65 6e 74 20 2b 3d 20 22 20 20 22 3b 0d Indent += " ";.
1590: 0a 09 09 09 44 6f 4d 73 67 4c 69 6e 65 28 22 25 ....DoMsgLine("%
15a0: 73 4e 43 6f 6e 74 65 78 74 73 3a 25 64 20 4e 50 sNContexts:%d NP
15b0: 72 6f 70 73 3a 25 64 20 4e 4d 65 74 68 6f 64 73 rops:%d NMethods
15c0: 3a 25 64 22 2c 20 6d 6d 4e 6f 6e 65 2c 49 6e 64 :%d", mmNone,Ind
15d0: 65 6e 74 2c 20 70 47 43 2d 3e 47 65 74 53 69 7a ent, pGC->GetSiz
15e0: 65 28 29 2c 20 70 47 43 2d 3e 47 65 74 4e 50 72 e(), pGC->GetNPr
15f0: 6f 70 73 28 29 2c 20 70 47 43 2d 3e 47 65 74 4e ops(), pGC->GetN
1600: 4d 65 74 68 6f 64 73 28 29 29 3b 0d 0a 09 09 09 Methods());.....
1610: 66 6f 72 28 69 6e 74 20 69 20 3d 20 30 3b 20 44 for(int i = 0; D
1620: 65 74 61 69 6c 20 26 26 20 69 20 3c 20 70 47 43 etail && i < pGC
1630: 2d 3e 47 65 74 53 69 7a 65 28 29 3b 20 69 2b 2b ->GetSize(); i++
1640: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 09 54 72 ).....{.......Tr
1650: 61 63 65 42 4c 43 6f 6e 74 65 78 74 28 70 47 43 aceBLContext(pGC
1660: 2d 3e 47 65 74 43 6f 6e 74 65 78 74 28 69 29 2c ->GetContext(i),
1670: 20 49 6e 64 65 6e 74 2b 22 20 20 22 29 3b 0d 0a Indent+" ");..
1680: 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 7d ...}....}...}..}
1690: 0d 0a 0d 0a 43 42 4c 43 6f 6e 74 65 78 74 2a 20 ....CBLContext*
16a0: 47 65 74 43 6f 6e 74 46 72 6f 6d 47 43 28 43 47 GetContFromGC(CG
16b0: 72 6f 75 70 43 6f 6e 74 65 78 74 2a 20 70 47 43 roupContext* pGC
16c0: 2c 20 43 52 75 6e 74 69 6d 65 43 6c 61 73 73 2a , CRuntimeClass*
16d0: 20 70 52 54 43 29 0d 0a 7b 0d 0a 09 69 66 20 28 pRTC)..{...if (
16e0: 70 47 43 29 0d 0a 09 7b 0d 0a 09 09 69 66 20 28 pGC)...{....if (
16f0: 70 47 43 2d 3e 49 73 4b 69 6e 64 4f 66 28 52 55 pGC->IsKindOf(RU
1700: 4e 54 49 4d 45 5f 43 4c 41 53 53 28 43 47 72 6f NTIME_CLASS(CGro
1710: 75 70 43 6f 6e 74 65 78 74 29 29 29 0d 0a 09 09 upContext)))....
1720: 7b 0d 0a 09 09 09 66 6f 72 28 69 6e 74 20 69 20 {.....for(int i
1730: 3d 20 30 3b 20 69 20 3c 20 70 47 43 2d 3e 47 65 = 0; i < pGC->Ge
1740: 74 53 69 7a 65 28 29 3b 20 69 2b 2b 29 0d 0a 09 tSize(); i++)...
1750: 09 09 7b 0d 0a 09 09 09 09 43 42 4c 43 6f 6e 74 ..{......CBLCont
1760: 65 78 74 2a 20 70 43 6f 6e 74 20 3d 20 70 47 43 ext* pCont = pGC
1770: 2d 3e 47 65 74 43 6f 6e 74 65 78 74 28 69 29 3b ->GetContext(i);
1780: 0d 0a 09 09 09 09 69 66 20 28 70 43 6f 6e 74 2d ......if (pCont-
1790: 3e 47 65 74 52 75 6e 74 69 6d 65 43 6c 61 73 73 >GetRuntimeClass
17a0: 28 29 20 3d 3d 20 70 52 54 43 29 0d 0a 09 09 09 () == pRTC).....
17b0: 09 7b 0d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 .{.......return
17c0: 70 43 6f 6e 74 3b 0d 0a 09 09 09 09 7d 0d 0a 09 pCont;......}...
17d0: 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 72 ..}....}...}...r
17e0: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 7d 0d 0a eturn NULL;..}..
17f0: 0d 0a 43 42 4c 43 6f 6e 74 65 78 74 2a 20 47 65 ..CBLContext* Ge
1800: 74 43 6f 6e 74 46 72 6f 6d 47 43 28 43 47 72 6f tContFromGC(CGro
1810: 75 70 43 6f 6e 74 65 78 74 2a 20 70 47 43 2c 20 upContext* pGC,
1820: 43 53 74 72 69 6e 67 20 52 54 43 4e 61 6d 65 29 CString RTCName)
1830: 0d 0a 7b 0d 0a 09 69 66 20 28 70 47 43 29 0d 0a ..{...if (pGC)..
1840: 09 7b 0d 0a 09 09 69 66 20 28 70 47 43 2d 3e 49 .{....if (pGC->I
1850: 73 4b 69 6e 64 4f 66 28 52 55 4e 54 49 4d 45 5f sKindOf(RUNTIME_
1860: 43 4c 41 53 53 28 43 47 72 6f 75 70 43 6f 6e 74 CLASS(CGroupCont
1870: 65 78 74 29 29 29 0d 0a 09 09 7b 0d 0a 09 09 09 ext)))....{.....
1880: 66 6f 72 28 69 6e 74 20 69 20 3d 20 30 3b 20 69 for(int i = 0; i
1890: 20 3c 20 70 47 43 2d 3e 47 65 74 53 69 7a 65 28 < pGC->GetSize(
18a0: 29 3b 20 69 2b 2b 29 0d 0a 09 09 09 7b 0d 0a 09 ); i++).....{...
18b0: 09 09 09 43 42 4c 43 6f 6e 74 65 78 74 2a 20 70 ...CBLContext* p
18c0: 43 6f 6e 74 20 3d 20 70 47 43 2d 3e 47 65 74 43 Cont = pGC->GetC
18d0: 6f 6e 74 65 78 74 28 69 29 3b 0d 0a 09 09 09 09 ontext(i);......
18e0: 69 66 20 28 21 73 74 72 63 6d 70 28 52 54 43 4e if (!strcmp(RTCN
18f0: 61 6d 65 2c 20 70 43 6f 6e 74 2d 3e 47 65 74 52 ame, pCont->GetR
1900: 75 6e 74 69 6d 65 43 6c 61 73 73 28 29 2d 3e 6d untimeClass()->m
1910: 5f 6c 70 73 7a 43 6c 61 73 73 4e 61 6d 65 29 29 _lpszClassName))
1920: 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 72 65 ......{.......re
1930: 74 75 72 6e 20 70 43 6f 6e 74 3b 0d 0a 09 09 09 turn pCont;.....
1940: 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 .}.....}....}...
1950: 7d 0d 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b }...return NULL;
1960: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 46 6f 72 6d ..}....void Form
1970: 61 74 4d 65 73 73 61 67 65 41 6e 64 52 75 6e 74 atMessageAndRunt
1980: 69 6d 65 45 72 72 6f 72 28 44 57 4f 52 44 20 64 imeError(DWORD d
1990: 77 4d 65 73 73 61 67 65 49 64 29 0d 0a 7b 0d 0a wMessageId)..{..
19a0: 09 4c 50 56 4f 49 44 20 6c 70 4d 73 67 42 75 66 .LPVOID lpMsgBuf
19b0: 3b 0d 0a 09 44 57 4f 52 44 20 72 65 73 20 3d 20 ;...DWORD res =
19c0: 46 6f 72 6d 61 74 4d 65 73 73 61 67 65 28 0d 0a FormatMessage(..
19d0: 09 09 46 4f 52 4d 41 54 5f 4d 45 53 53 41 47 45 ..FORMAT_MESSAGE
19e0: 5f 41 4c 4c 4f 43 41 54 45 5f 42 55 46 46 45 52 _ALLOCATE_BUFFER
19f0: 7c 46 4f 52 4d 41 54 5f 4d 45 53 53 41 47 45 5f |FORMAT_MESSAGE_
1a00: 46 52 4f 4d 5f 53 59 53 54 45 4d 2c 20 4e 55 4c FROM_SYSTEM, NUL
1a10: 4c 2c 0d 0a 09 09 64 77 4d 65 73 73 61 67 65 49 L,....dwMessageI
1a20: 64 2c 20 4d 41 4b 45 4c 41 4e 47 49 44 28 4c 41 d, MAKELANGID(LA
1a30: 4e 47 5f 4e 45 55 54 52 41 4c 2c 20 53 55 42 4c NG_NEUTRAL, SUBL
1a40: 41 4e 47 5f 44 45 46 41 55 4c 54 29 2c 0d 0a 09 ANG_DEFAULT),...
1a50: 09 28 4c 50 54 53 54 52 29 26 6c 70 4d 73 67 42 .(LPTSTR)&lpMsgB
1a60: 75 66 2c 20 30 2c 20 4e 55 4c 4c 29 3b 0d 0a 09 uf, 0, NULL);...
1a70: 43 53 74 72 69 6e 67 20 73 74 72 45 72 72 3b 0d CString strErr;.
1a80: 0a 09 69 66 20 28 72 65 73 29 0d 0a 09 09 73 74 ..if (res)....st
1a90: 72 45 72 72 20 3d 20 28 4c 50 54 53 54 52 29 6c rErr = (LPTSTR)l
1aa0: 70 4d 73 67 42 75 66 3b 0d 0a 09 65 6c 73 65 0d pMsgBuf;...else.
1ab0: 0a 09 09 73 74 72 45 72 72 2e 46 6f 72 6d 61 74 ...strErr.Format
1ac0: 28 22 cd e5 e8 e7 e2 e5 f1 f2 ed e0 ff 20 ee f8 ("........... ..
1ad0: e8 e1 ea e0 3a 20 30 78 25 30 38 58 22 2c 20 64 ....: 0x%08X", d
1ae0: 77 4d 65 73 73 61 67 65 49 64 29 3b 0d 0a 09 4c wMessageId);...L
1af0: 6f 63 61 6c 46 72 65 65 28 6c 70 4d 73 67 42 75 ocalFree(lpMsgBu
1b00: 66 29 3b 0d 0a 09 52 75 6e 74 69 6d 65 45 72 72 f);...RuntimeErr
1b10: 6f 72 28 73 74 72 45 72 72 29 3b 0d 0a 7d 0d 0a or(strErr);..}..
1b20: 0d 0a 23 70 72 61 67 6d 61 20 63 6f 6d 6d 65 6e ..#pragma commen
1b30: 74 28 6c 69 62 2c 20 22 76 65 72 73 69 6f 6e 2e t(lib, "version.
1b40: 6c 69 62 22 29 0d 0a 0d 0a 43 53 74 72 69 6e 67 lib")....CString
1b50: 20 47 65 74 4d 6f 64 75 6c 65 56 65 72 73 69 6f GetModuleVersio
1b60: 6e 49 6e 66 6f 28 48 4d 4f 44 55 4c 45 20 68 4d nInfo(HMODULE hM
1b70: 6f 64 75 6c 65 2c 20 43 53 74 72 69 6e 67 20 56 odule, CString V
1b80: 65 72 49 6e 66 6f 4e 61 6d 65 29 0d 0a 2f 2f 56 erInfoName)..//V
1b90: 65 72 49 6e 66 6f 4e 61 6d 65 3a 20 46 69 6c 65 erInfoName: File
1ba0: 56 65 72 73 69 6f 6e 2c 20 50 72 69 76 61 74 65 Version, Private
1bb0: 42 75 69 6c 64 2c 20 65 74 63 0d 0a 7b 0d 0a 09 Build, etc..{...
1bc0: 43 53 74 72 69 6e 67 20 72 65 73 3b 0d 0a 0d 0a CString res;....
1bd0: 09 63 68 61 72 2a 20 66 6e 61 6d 65 20 3d 20 6e .char* fname = n
1be0: 65 77 20 63 68 61 72 5b 4d 41 58 5f 46 4e 41 4d ew char[MAX_FNAM
1bf0: 45 5f 4c 45 4e 5d 3b 0d 0a 09 47 65 74 4d 6f 64 E_LEN];...GetMod
1c00: 75 6c 65 46 69 6c 65 4e 61 6d 65 28 68 4d 6f 64 uleFileName(hMod
1c10: 75 6c 65 2c 20 66 6e 61 6d 65 2c 20 4d 41 58 5f ule, fname, MAX_
1c20: 46 4e 41 4d 45 5f 4c 45 4e 29 3b 0d 0a 0d 0a 09 FNAME_LEN);.....
1c30: 44 57 4f 52 44 20 73 69 7a 65 2c 20 7a 3b 0d 0a DWORD size, z;..
1c40: 09 73 69 7a 65 20 3d 20 3a 3a 47 65 74 46 69 6c .size = ::GetFil
1c50: 65 56 65 72 73 69 6f 6e 49 6e 66 6f 53 69 7a 65 eVersionInfoSize
1c60: 28 66 6e 61 6d 65 2c 20 26 7a 29 3b 0d 0a 0d 0a (fname, &z);....
1c70: 09 69 66 28 73 69 7a 65 29 0d 0a 09 7b 0d 0a 09 .if(size)...{...
1c80: 09 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 .static const ch
1c90: 61 72 2a 20 45 6e 67 4e 61 6d 65 73 5b 5d 3d 7b ar* EngNames[]={
1ca0: 0d 0a 09 09 09 22 46 69 6c 65 56 65 72 73 69 6f ....."FileVersio
1cb0: 6e 22 2c 0d 0a 09 09 09 22 50 72 69 76 61 74 65 n",....."Private
1cc0: 42 75 69 6c 64 22 2c 0d 0a 09 09 7d 3b 0d 0a 09 Build",....};...
1cd0: 09 63 68 61 72 2a 20 70 56 65 72 73 69 6f 6e 3d .char* pVersion=
1ce0: 6e 65 77 20 63 68 61 72 5b 73 69 7a 65 5d 3b 0d new char[size];.
1cf0: 0a 09 09 47 65 74 46 69 6c 65 56 65 72 73 69 6f ...GetFileVersio
1d00: 6e 49 6e 66 6f 28 66 6e 61 6d 65 2c 20 30 2c 20 nInfo(fname, 0,
1d10: 73 69 7a 65 2c 20 70 56 65 72 73 69 6f 6e 29 3b size, pVersion);
1d20: 0d 0a 0d 0a 09 09 57 4f 52 44 2a 20 74 72 61 6e ......WORD* tran
1d30: 73 6c 61 74 65 3b 0d 0a 09 09 55 49 4e 54 20 6c slate;....UINT l
1d40: 65 6e 3b 0d 0a 09 09 56 65 72 51 75 65 72 79 56 en;....VerQueryV
1d50: 61 6c 75 65 28 70 56 65 72 73 69 6f 6e 2c 20 22 alue(pVersion, "
1d60: 5c 5c 56 61 72 46 69 6c 65 49 6e 66 6f 5c 5c 54 \\VarFileInfo\\T
1d70: 72 61 6e 73 6c 61 74 69 6f 6e 22 2c 20 28 76 6f ranslation", (vo
1d80: 69 64 2a 2a 29 26 74 72 61 6e 73 6c 61 74 65 2c id**)&translate,
1d90: 20 26 6c 65 6e 29 3b 0d 0a 09 09 43 53 74 72 69 &len);....CStri
1da0: 6e 67 20 62 6c 6f 63 6b 4e 61 6d 65 3b 0d 0a 09 ng blockName;...
1db0: 09 62 6c 6f 63 6b 4e 61 6d 65 2e 46 6f 72 6d 61 .blockName.Forma
1dc0: 74 28 22 5c 5c 53 74 72 69 6e 67 46 69 6c 65 49 t("\\StringFileI
1dd0: 6e 66 6f 5c 5c 25 30 34 78 25 30 34 78 5c 5c 25 nfo\\%04x%04x\\%
1de0: 73 22 2c 74 72 61 6e 73 6c 61 74 65 5b 30 5d 2c s",translate[0],
1df0: 20 74 72 61 6e 73 6c 61 74 65 5b 31 5d 2c 20 56 translate[1], V
1e00: 65 72 49 6e 66 6f 4e 61 6d 65 29 3b 0d 0a 0d 0a erInfoName);....
1e10: 09 09 4c 50 43 54 53 54 52 20 76 61 6c 75 65 62 ..LPCTSTR valueb
1e20: 75 66 3b 0d 0a 09 09 56 65 72 51 75 65 72 79 56 uf;....VerQueryV
1e30: 61 6c 75 65 28 70 56 65 72 73 69 6f 6e 2c 20 28 alue(pVersion, (
1e40: 63 68 61 72 2a 29 28 4c 50 43 54 53 54 52 29 28 char*)(LPCTSTR)(
1e50: 62 6c 6f 63 6b 4e 61 6d 65 29 2c 20 28 76 6f 69 blockName), (voi
1e60: 64 2a 2a 29 26 76 61 6c 75 65 62 75 66 2c 20 26 d**)&valuebuf, &
1e70: 6c 65 6e 29 3b 0d 0a 09 09 72 65 73 20 3d 20 76 len);....res = v
1e80: 61 6c 75 65 62 75 66 3b 0d 0a 0d 0a 09 09 64 65 aluebuf;......de
1e90: 6c 65 74 65 20 70 56 65 72 73 69 6f 6e 3b 0d 0a lete pVersion;..
1ea0: 09 7d 0d 0a 09 64 65 6c 65 74 65 20 66 6e 61 6d .}...delete fnam
1eb0: 65 3b 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 72 65 e;.....return re
1ec0: 73 3b 0d 0a 7d 0d 0a 0d 0a 43 53 74 72 69 6e 67 s;..}....CString
1ed0: 20 47 65 74 4d 6f 64 75 6c 65 56 65 72 73 69 6f GetModuleVersio
1ee0: 6e 49 6e 66 6f 28 43 53 74 72 69 6e 67 20 4d 6f nInfo(CString Mo
1ef0: 64 75 6c 65 4e 61 6d 65 2c 20 43 53 74 72 69 6e duleName, CStrin
1f00: 67 20 56 65 72 49 6e 66 6f 4e 61 6d 65 29 0d 0a g VerInfoName)..
1f10: 2f 2f 56 65 72 49 6e 66 6f 4e 61 6d 65 3a 20 46 //VerInfoName: F
1f20: 69 6c 65 56 65 72 73 69 6f 6e 2c 20 50 72 69 76 ileVersion, Priv
1f30: 61 74 65 42 75 69 6c 64 2c 20 65 74 63 0d 0a 7b ateBuild, etc..{
1f40: 0d 0a 09 72 65 74 75 72 6e 20 47 65 74 4d 6f 64 ...return GetMod
1f50: 75 6c 65 56 65 72 73 69 6f 6e 49 6e 66 6f 28 47 uleVersionInfo(G
1f60: 65 74 4d 6f 64 75 6c 65 48 61 6e 64 6c 65 28 4d etModuleHandle(M
1f70: 6f 64 75 6c 65 4e 61 6d 65 29 2c 20 56 65 72 49 oduleName), VerI
1f80: 6e 66 6f 4e 61 6d 65 29 3b 0d 0a 7d 0d 0a 0d 0a nfoName);..}....