|
|
1.1 ! root 1: // This is a part of the Microsoft Foundation Classes C++ library. ! 2: // Copyright (C) 1992 Microsoft Corporation ! 3: // All rights reserved. ! 4: // ! 5: // This source code is only intended as a supplement to the ! 6: // Microsoft Foundation Classes Reference and Microsoft ! 7: // QuickHelp documentation provided with the library. ! 8: // See these sources for detailed information regarding the ! 9: // Microsoft Foundation Classes product. ! 10: ! 11: ! 12: #include "afxwin.h" ! 13: #pragma hdrstop ! 14: ! 15: #ifdef AFX_CORE_SEG ! 16: #pragma code_seg(AFX_CORE_SEG) ! 17: #endif ! 18: ! 19: #ifdef _DEBUG // entire file for debugging ! 20: ! 21: #include "trace_.h" ! 22: #include <dde.h> ! 23: ! 24: ///////////////////////////////////////////////////////////////////////////// ! 25: // Build data tables by including data file three times ! 26: ! 27: #define DO(WM_FOO) static char BASED_CODE sz##WM_FOO[] = #WM_FOO; ! 28: #include "tracedat.h" ! 29: #undef DO ! 30: ! 31: static UINT BASED_CODE allMessages[] = ! 32: { ! 33: #define DO(WM_FOO) WM_FOO, ! 34: #include "tracedat.h" ! 35: #undef DO ! 36: 0 /* end of table */ ! 37: }; ! 38: ! 39: static LPCSTR BASED_CODE allMessageNames[] = ! 40: { ! 41: #define DO(WM_FOO) sz##WM_FOO, ! 42: #include "tracedat.h" ! 43: #undef DO ! 44: NULL /* end of table */ ! 45: }; ! 46: ! 47: ///////////////////////////////////////////////////////////////////////////// ! 48: // DDE special case ! 49: ! 50: static void TraceDDE(LPCSTR lpPrefix, const MSG* pMsg) ! 51: { ! 52: #ifndef _NTWIN ! 53: if (pMsg->message == WM_DDE_EXECUTE) ! 54: { ! 55: HANDLE hCommands = (HANDLE)HIWORD(pMsg->lParam); ! 56: ASSERT(hCommands != NULL); ! 57: ! 58: LPCSTR lpCommands = (LPCSTR)::GlobalLock(hCommands); ! 59: ASSERT(lpCommands != NULL); ! 60: TRACE("%Fs: Execute '%Fs'\n", lpPrefix, lpCommands); ! 61: ::GlobalUnlock(hCommands); ! 62: } ! 63: else if (pMsg->message == WM_DDE_ADVISE) ! 64: { ! 65: ATOM aItem = HIWORD(pMsg->lParam); ! 66: HANDLE hAdvise = (HANDLE)LOWORD(pMsg->lParam); ! 67: ASSERT(hAdvise != NULL); ! 68: ! 69: DDEADVISE FAR* lpAdvise = (DDEADVISE FAR *)::GlobalLock(hAdvise); ! 70: ASSERT(lpAdvise != NULL); ! 71: char szItem[80]; ! 72: szItem[0] = '\0'; ! 73: ! 74: if (aItem != 0) ! 75: ::GlobalGetAtomName(aItem, szItem, sizeof(szItem)); ! 76: ! 77: char szFormat[80]; ! 78: szFormat[0] = '\0'; ! 79: if ((0xC000 <= lpAdvise->cfFormat) && (lpAdvise->cfFormat <= 0xFFFF)) ! 80: ::GetClipboardFormatName(lpAdvise->cfFormat, ! 81: szFormat, sizeof(szFormat)); ! 82: ! 83: // User defined clipboard formats have a range of 0xC000->0xFFFF ! 84: // System clipboard formats have other ranges, but no printable ! 85: // format names. ! 86: ! 87: ! 88: TRACE("%Fs: Advise item='%s', Format='%s', Ack=%d, Defer Update= %d\n", ! 89: lpPrefix, szItem, szFormat, lpAdvise->fAckReq, lpAdvise->fDeferUpd); ! 90: ::GlobalUnlock(hAdvise); ! 91: } ! 92: #else ! 93: TRACE("Windows NT: DDE Trace\n"); ! 94: #endif //!_NTWIN ! 95: } ! 96: ! 97: ///////////////////////////////////////////////////////////////////////////// ! 98: ! 99: void AfxTraceMsg(LPCSTR lpPrefix, const MSG* pMsg) ! 100: { ! 101: if (pMsg->message == WM_MOUSEMOVE || pMsg->message == WM_NCMOUSEMOVE || ! 102: pMsg->message == WM_NCHITTEST || ! 103: pMsg->message == WM_SETCURSOR || ! 104: #ifndef _NTWIN ! 105: pMsg->message == WM_CTLCOLOR || ! 106: #else ! 107: pMsg->message == WM_CTLCOLORMSGBOX || ! 108: pMsg->message == WM_CTLCOLOREDIT || ! 109: pMsg->message == WM_CTLCOLORLISTBOX || ! 110: pMsg->message == WM_CTLCOLORBTN || ! 111: pMsg->message == WM_CTLCOLORDLG || ! 112: pMsg->message == WM_CTLCOLORSCROLLBAR || ! 113: pMsg->message == WM_CTLCOLORSTATIC || ! 114: #endif ! 115: pMsg->message == WM_ENTERIDLE) ! 116: { ! 117: // never report mouse moves (too frequent) or other messages also ! 118: // sent as part of mouse movement ! 119: return; ! 120: } ! 121: ! 122: LPCSTR lpMsgName = NULL; ! 123: char szBuf[80]; ! 124: ! 125: // find message name ! 126: if (pMsg->message >= 0xC000) ! 127: { ! 128: // Window message registered with 'RegisterWindowMessage' ! 129: // (actually a USER atom) ! 130: if (::GetClipboardFormatName(pMsg->message, szBuf, sizeof(szBuf)) != 0) ! 131: lpMsgName = szBuf; ! 132: } ! 133: else if (pMsg->message >= WM_USER) ! 134: { ! 135: // User message ! 136: sprintf(szBuf, "WM_USER+0x%04X", pMsg->message - WM_USER); ! 137: lpMsgName = szBuf; ! 138: } ! 139: else ! 140: { ! 141: // a system windows message ! 142: const UINT FAR* lpMessage; ! 143: for (lpMessage = allMessages; *lpMessage != 0; lpMessage++) ! 144: { ! 145: if (*lpMessage == pMsg->message) ! 146: { ! 147: int iMsg = lpMessage - (const UINT FAR*)allMessages; ! 148: lpMsgName = allMessageNames[iMsg]; ! 149: break; ! 150: } ! 151: } ! 152: } ! 153: ! 154: if (lpMsgName != NULL) ! 155: { ! 156: TRACE("%Fs: hwnd=0x%04x, msg = %Fs (0x%04x, 0x%08x)\n", lpPrefix, ! 157: pMsg->hwnd, lpMsgName, pMsg->wParam, pMsg->lParam); ! 158: } ! 159: else ! 160: { ! 161: TRACE("%Fs: hwnd=0x%04x, msg = 0x%04x (0x%04x, 0x%08x)\n", lpPrefix, ! 162: pMsg->hwnd, pMsg->message, pMsg->wParam, pMsg->lParam); ! 163: } ! 164: ! 165: if (pMsg->message >= WM_DDE_FIRST && pMsg->message <= WM_DDE_LAST) ! 166: { ! 167: TraceDDE(lpPrefix, pMsg); ! 168: } ! 169: } ! 170: ! 171: ///////////////////////////////////////////////////////////////////////////// ! 172: ! 173: #endif // _DEBUG (entire file)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.