--- mstools/samples/ddeml/client/ddemlcl.c 2018/08/09 18:20:38 1.1.1.1 +++ mstools/samples/ddeml/client/ddemlcl.c 2018/08/09 18:25:40 1.1.1.4 @@ -1,3 +1,16 @@ + + + +/******************************************************************************\ +* This is a part of the Microsoft Source Code Samples. +* Copyright (C) 1993 Microsoft Corporation. +* All rights reserved. +* This source code is only intended as a supplement to +* Microsoft Development Tools and/or WinHelp documentation. +* See these sources for detailed information regarding the +* Microsoft samples programs. +\******************************************************************************/ + /*************************************************************************** * * * PROGRAM : client.c * @@ -13,7 +26,14 @@ #include "infoctrl.h" /* global variables used in this module or among more than one module */ -CONVCONTEXT CCFilter = { sizeof(CONVCONTEXT), 0, 0, 0, 0L, 0L }; +CONVCONTEXT CCFilter = { sizeof(CONVCONTEXT), 0, 0, 0, 0L, 0L, + { + sizeof(SECURITY_QUALITY_OF_SERVICE), + SecurityImpersonation, + SECURITY_STATIC_TRACKING, + TRUE + } +}; DWORD idInst = 0; HANDLE hInst; /* Program instance handle */ HANDLE hAccel; /* Main accelerator resource */ @@ -25,12 +45,14 @@ DWORD wDelay = 0; BOOL fBlockNextCB = FALSE; /* set if next callback causes a CBR_BLOCK */ BOOL fTermNextCB = FALSE; /* set to call DdeDisconnect() on next callback */ BOOL fAutoReconnect = FALSE; /* set if DdeReconnect() is to be called on XTYP_DISCONNECT callbacks */ -HDDEDATA hDataOwned = NULL; /* Current owned huge data handle */ -DWORD fmtLink = 0; /* link clipboard format number */ -DWORD DefOptions = 0; /* default transaction optons */ +HDDEDATA hDataOwned = 0; /* Current owned huge data handle */ +DWORD fmtLink = 0; /* link clipboard format number */ +DWORD DefOptions = 0; /* default transaction optons */ OWNED aOwned[MAX_OWNED]; /* list of all owned handles. */ -DWORD cOwned = 0; /* number of existing owned handles. */ +DWORD cOwned = 0; /* number of existing owned handles. */ FARPROC lpMsgFilterProc; /* instance proc from MSGF_DDEMGR filter */ +HSZ hszHuge; /* used for checking huge item data */ +HHOOK ghhk = 0; /* * This is the array of formats we support @@ -55,12 +77,11 @@ VOID NEAR PASCAL SetWrap (HWND,BOOL); * enters the message loop. * * * ****************************************************************************/ -int APIENTRY WinMain( - HANDLE hInstance, - HANDLE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow - ) +int WINAPI WinMain( +HINSTANCE hInstance, +HINSTANCE hPrevInstance, +LPSTR lpszCmdLine, +INT nCmdShow) { MSG msg; @@ -78,16 +99,17 @@ int APIENTRY WinMain( /* Enter main message loop */ while (GetMessage (&msg, NULL, 0, 0)){ - (*lpMsgFilterProc)(MSGF_DDEMGR, 0, (LONG)(LPMSG)&msg); + ((HOOKPROC)*lpMsgFilterProc)(MSGF_DDEMGR, 0, (LONG)(LPMSG)&msg); } // free up any appowned handles while (cOwned) { DdeFreeDataHandle(aOwned[--cOwned].hData); } + DdeFreeStringHandle(idInst, hszHuge); DdeUninitialize(idInst); - UnhookWindowsHook(WH_MSGFILTER, lpMsgFilterProc); + UnhookWindowsHook(WH_MSGFILTER, (HOOKPROC)lpMsgFilterProc); FreeProcInstance(lpMsgFilterProc); return 0; @@ -142,7 +164,7 @@ LPARAM lParam; break; case WM_COMMAND: - CommandHandler (hwnd, GET_WM_COMMAND_ID(wParam, lParam)); + CommandHandler (hwnd, LOWORD(wParam)); break; case WM_CLOSE: @@ -194,7 +216,7 @@ LPARAM lParam; */ pmci = (MYCONVINFO *)MyAlloc(sizeof(MYCONVINFO)); if (pmci != NULL) { - _fmemcpy(pmci, + memcpy(pmci, (LPSTR)((LPMDICREATESTRUCT)((LPCREATESTRUCT)lParam)->lpCreateParams)->lParam, sizeof(MYCONVINFO)); pmci->hwndXaction = 0; /* no current transaction yet */ @@ -278,12 +300,12 @@ LPARAM lParam; // fall through case WM_MDIACTIVATE: - hwndActive = GET_WM_MDIACTIVATE_HWNDACTIVATE(wParam, lParam); + hwndActive = (HWND)(lParam); pmci = (MYCONVINFO *)GetWindowLong(hwnd, 0); /* * pass the focus onto the current transaction window. */ - if (GET_WM_MDIACTIVATE_FACTIVATE(hwnd, wParam, lParam) && + if ((lParam == (LONG)hwnd) && IsWindow(pmci->hwndXaction)) SetFocus(pmci->hwndXaction); break; @@ -562,17 +584,17 @@ DWORD id) * Create a conversation with the link app and * begin a request and advise start transaction. */ - xact.hConv = CreateConv(DdeCreateStringHandle(idInst, psz, NULL), - DdeCreateStringHandle(idInst, &psz[_fstrlen(psz) + 1], NULL), + xact.hConv = CreateConv(DdeCreateStringHandle(idInst, psz, 0), + DdeCreateStringHandle(idInst, &psz[strlen(psz) + 1], 0), FALSE); if (xact.hConv) { - psz += _fstrlen(psz) + 1; - psz += _fstrlen(psz) + 1; + psz += strlen(psz) + 1; + psz += strlen(psz) + 1; xact.ulTimeout = DefTimeout; xact.wType = XTYP_ADVSTART; xact.hDdeData = 0; xact.wFmt = CF_TEXT; - xact.hszItem = DdeCreateStringHandle(idInst, psz, NULL); + xact.hszItem = DdeCreateStringHandle(idInst, psz, 0); xact.fsOptions = 0; ProcessTransaction(&xact); xact.wType = XTYP_REQUEST; @@ -588,7 +610,7 @@ DWORD id) case IDM_CONNECT: case IDM_RECONNECT: - DoDialog(MAKEINTRESOURCE(IDD_CONNECT), (WNDPROC)ConnectDlgProc, + DoDialog(MAKEINTRESOURCE(IDD_CONNECT), (DLGPROC)ConnectDlgProc, id == IDM_RECONNECT, FALSE); break; @@ -599,7 +621,7 @@ DWORD id) break; case IDM_TRANSACT: - if (DoDialog(MAKEINTRESOURCE(IDD_TRANSACT), (WNDPROC)TransactDlgProc, + if (DoDialog(MAKEINTRESOURCE(IDD_TRANSACT), (DLGPROC)TransactDlgProc, (DWORD)(LPSTR)pmci->hConv, FALSE)) SetFocus(GetWindow(hwndActive, GW_CHILD)); break; @@ -611,7 +633,7 @@ DWORD id) break; case IDM_ABANDONALL: - DdeAbandonTransaction(idInst, pmci->hConv, NULL); + DdeAbandonTransaction(idInst, pmci->hConv, 0L); { HWND hwndXaction; @@ -639,17 +661,17 @@ DWORD id) break; case IDM_BLOCKALLCBS: - DdeEnableCallback(idInst, NULL, EC_DISABLE); + DdeEnableCallback(idInst, 0, EC_DISABLE); InvalidateRect(hwndMDIClient, NULL, TRUE); break; case IDM_ENABLEALLCBS: - DdeEnableCallback(idInst, NULL, EC_ENABLEALL); + DdeEnableCallback(idInst, 0, EC_ENABLEALL); InvalidateRect(hwndMDIClient, NULL, TRUE); break; case IDM_ENABLEONECB: - DdeEnableCallback(idInst, NULL, EC_ENABLEONE); + DdeEnableCallback(idInst, 0, EC_ENABLEONE); InvalidateRect(hwndMDIClient, NULL, TRUE); break; @@ -662,17 +684,17 @@ DWORD id) break; case IDM_DELAY: - DoDialog(MAKEINTRESOURCE(IDD_VALUEENTRY), (WNDPROC)DelayDlgProc, NULL, + DoDialog(MAKEINTRESOURCE(IDD_VALUEENTRY), (DLGPROC)DelayDlgProc, 0, TRUE); break; case IDM_TIMEOUT: - DoDialog(MAKEINTRESOURCE(IDD_VALUEENTRY), (WNDPROC)TimeoutDlgProc, NULL, + DoDialog(MAKEINTRESOURCE(IDD_VALUEENTRY), (DLGPROC)TimeoutDlgProc, 0, TRUE); break; case IDM_CONTEXT: - DoDialog(MAKEINTRESOURCE(IDD_CONTEXT), (WNDPROC)ContextDlgProc, NULL, TRUE); + DoDialog(MAKEINTRESOURCE(IDD_CONTEXT), (DLGPROC)ContextDlgProc, 0, TRUE); break; case IDM_AUTORECONNECT: @@ -710,7 +732,7 @@ DWORD id) break; case IDM_HELPABOUT:{ - DoDialog(MAKEINTRESOURCE(IDD_ABOUT), (WNDPROC)AboutDlgProc, NULL, TRUE); + DoDialog(MAKEINTRESOURCE(IDD_ABOUT), (DLGPROC)AboutDlgProc, 0, TRUE); break; } @@ -721,7 +743,7 @@ DWORD id) * window menu. */ DefFrameProc(hwnd, hwndMDIClient, WM_COMMAND, - GET_WM_COMMAND_MPS(id, 0, 0)); + (WPARAM)MAKELONG(id, 0), (LONG)(0)); } } @@ -743,9 +765,16 @@ DWORD id, { CHAR sz[160]; CHAR szFmt[128]; +#if ( _ALPHA_ == 1 ) + va_list args; + va_start(args, id); LoadString (hInst, id, szFmt, sizeof (szFmt)); + wvsprintf (sz, szFmt, args); +#else + LoadString (hInst, id, szFmt, sizeof (szFmt)); wvsprintf (sz, szFmt, (LPSTR)(&id + 1)); +#endif LoadString (hInst, IDS_APPNAME, szFmt, sizeof (szFmt)); return MessageBox (hwndFrame, sz, szFmt, bFlags); } @@ -771,7 +800,7 @@ BOOL fList) CONVINFO ci; if (fList) { - hConv = (HCONV)DdeConnectList(idInst, hszApp, hszTopic, NULL, &CCFilter); + hConv = (HCONV)DdeConnectList(idInst, hszApp, hszTopic, 0, &CCFilter); } else { hConv = DdeConnect(idInst, hszApp, hszTopic, &CCFilter); } @@ -843,7 +872,8 @@ BOOL fList) mcs.hOwner = hInst; mcs.x = mcs.cx = CW_USEDEFAULT; mcs.y = mcs.cy = CW_USEDEFAULT; - mcs.style = GetWindow(hwndMDIClient, GW_CHILD) ? 0L : WS_MAXIMIZE; + mcs.style = GetWindow(hwndMDIClient, GW_CHILD) ? + WS_CLIPCHILDREN : (WS_MAXIMIZE | WS_CLIPCHILDREN); // mci.hwndXaction = mci.fList = fList; @@ -883,6 +913,7 @@ HCONVLIST hConvList) DWORD cConv = 0; CONVINFO ci; DWORD cb = 0; + DWORD d; CHAR *psz, *pszStart; ci.cb = sizeof(CONVINFO); @@ -913,14 +944,16 @@ HCONVLIST hConvList) if (pszStart = psz = MyAlloc(cb)) { *psz = '\0'; - hConv = 0; while (hConv = DdeQueryNextServer(hConvList, hConv)) { if (DdeQueryConvInfo(hConv, QID_SYNC, &ci) && IsWindow((HWND)ci.hUser)) { - psz += GetWindowText((HWND)ci.hUser, psz, cb); + d = GetWindowText((HWND)ci.hUser, psz, cb); + psz += d; + cb -= d; if (--cConv) { *psz++ = '\r'; *psz++ = '\n'; + cb -= 2; } } } @@ -1217,12 +1250,12 @@ HSZ hsz) * problems. However, this is included as an example. * ****************************************************************************/ -DWORD APIENTRY MyMsgFilterProc( -INT nCode, +LRESULT CALLBACK MyMsgFilterProc( +int nCode, WPARAM wParam, -DWORD lParam) +LPARAM lParam) { - wParam; // not used + UNREFERENCED_PARAMETER(wParam); #define lpmsg ((LPMSG)lParam) if (nCode == MSGF_DDEMGR) { @@ -1239,7 +1272,9 @@ DWORD lParam) } return(1); } + if (nCode < 0) { + CallNextHookEx(ghhk, nCode, wParam, lParam); + } return(0); #undef lpmsg } -