|
|
1.1 root 1: /***************************************************************************
2: * *
3: * MODULE : dialog.c *
4: * *
5: * PURPOSE : Contains all dialog procedures and related functions. *
6: * *
7: ***************************************************************************/
8: #include "client.h"
9: #include "infoctrl.h"
10: #include <string.h>
11: #include <stdio.h>
12: #include "huge.h"
13:
14: #define MAX_NAME 100 // max size for edit controls with app/topic/item names.
15: CHAR szWild[] = "*"; // used to indicate wild names ("" is also cool)
16: CHAR szT[MAX_NAME]; // temp buf for munging names.
17:
18:
19:
20: /****************************************************************************
21: * *
22: * FUNCTION : DoDialog() *
23: * *
24: * PURPOSE : Generic dialog invocation routine. Handles procInstance *
25: * stuff, focus management and param passing. *
26: * RETURNS : result of dialog procedure. *
27: * *
28: ****************************************************************************/
29: INT FAR DoDialog(
30: LPSTR lpTemplateName,
1.1.1.2 ! root 31: DLGPROC lpDlgProc,
1.1 root 32: LONG param,
33: BOOL fRememberFocus)
34: {
1.1.1.2 ! root 35: INT iRet;
1.1 root 36: HWND hwndFocus;
37:
38: if (fRememberFocus)
39: hwndFocus = GetFocus();
40: lpDlgProc = MakeProcInstance(lpDlgProc, hInst);
1.1.1.2 ! root 41: iRet = DialogBoxParam(hInst, lpTemplateName, hwndFrame, lpDlgProc, param);
1.1 root 42: FreeProcInstance(lpDlgProc);
43: if (fRememberFocus)
44: SetFocus(hwndFocus);
1.1.1.2 ! root 45: return iRet;
1.1 root 46: }
47:
48:
49:
50: /****************************************************************************
51: * *
52: * FUNCTION : *
53: * *
54: * PURPOSE : *
55: * *
56: * RETURNS : *
57: * *
58: ****************************************************************************/
59: BOOL APIENTRY AboutDlgProc ( hwnd, msg, wParam, lParam )
60: HWND hwnd;
61: UINT msg;
62: WPARAM wParam;
63: LPARAM lParam;
64: {
65: switch (msg){
66: case WM_INITDIALOG:
67: /* nothing to initialize */
68: break;
69:
70: case WM_COMMAND:
1.1.1.2 ! root 71: switch (LOWORD(wParam)) {
1.1 root 72: case IDOK:
73: case IDCANCEL:
74: EndDialog(hwnd, 0);
75: break;
76:
77: default:
78: return FALSE;
79: }
80: break;
81:
82: default:
83: return(FALSE);
84: }
85:
86: return TRUE;
87: }
88:
89:
90:
91:
92: /****************************************************************************
93: * *
94: * FUNCTION : *
95: * *
96: * PURPOSE : *
97: * *
98: * RETURNS : *
99: * *
100: ****************************************************************************/
101: BOOL APIENTRY ConnectDlgProc(
102: HWND hwnd,
103: UINT msg,
104: WPARAM wParam,
105: LPARAM lParam)
106: {
107: static BOOL fReconnect;
108: CHAR szT[MAX_NAME];
109: HSZ hszApp, hszTopic;
110: MYCONVINFO *pmci;
111:
112: switch (msg){
113: case WM_INITDIALOG:
114: SendDlgItemMessage(hwnd, IDEF_APPLICATION, EM_LIMITTEXT, MAX_NAME, 0);
115: SendDlgItemMessage(hwnd, IDEF_TOPIC, EM_LIMITTEXT, MAX_NAME, 0);
116: fReconnect = (BOOL)lParam;
117: if (fReconnect) {
118: PSTR psz;
119:
120: pmci = (MYCONVINFO *)GetWindowLong(hwndActive, 0);
121: SetWindowText(hwnd, "DDE Reconnect List");
122: psz = GetHSZName(pmci->hszApp);
123: SetDlgItemText(hwnd, IDEF_APPLICATION, psz);
124: MyFree(psz);
125: psz = GetHSZName(pmci->hszTopic);
126: SetDlgItemText(hwnd, IDEF_TOPIC, psz);
127: MyFree(psz);
128: ShowWindow(GetDlgItem(hwnd, IDCH_CONNECTLIST), SW_HIDE);
129: }
130: break;
131:
132: case WM_COMMAND:
1.1.1.2 ! root 133: switch (LOWORD(wParam)) {
1.1 root 134: case IDOK:
135: GetDlgItemText(hwnd, IDEF_APPLICATION, szT, MAX_NAME);
136: if (!strcmp(szT, szWild))
137: szT[0] = '\0';
138: hszApp = DdeCreateStringHandle(idInst, szT, 0);
139:
140: GetDlgItemText(hwnd, IDEF_TOPIC, szT, MAX_NAME);
141: if (!strcmp(szT, szWild))
142: szT[0] = '\0';
143: hszTopic = DdeCreateStringHandle(idInst, szT, 0);
144:
145: if (fReconnect) {
146: HCONV hConv;
147: CONVINFO ci;
148: DWORD cHwnd;
149: HWND *aHwnd, *pHwnd, hwndSave;
150:
151: ci.cb = sizeof(CONVINFO);
152: pmci = (MYCONVINFO *)GetWindowLong(hwndActive, 0);
153: hwndSave = hwndActive;
154:
155: // count the existing conversations and allocate aHwnd
156:
157: cHwnd = 0;
158: hConv = NULL;
159: while (hConv = DdeQueryNextServer((HCONVLIST)pmci->hConv, hConv))
160: cHwnd++;
161: aHwnd = (HWND *)MyAlloc(cHwnd * sizeof(HWND));
162:
163: // save all the old conversation windows into aHwnd.
164:
165: pHwnd = aHwnd;
166: hConv = NULL;
167: while (hConv = DdeQueryNextServer((HCONVLIST)pmci->hConv, hConv)) {
168: DdeQueryConvInfo(hConv, QID_SYNC, &ci);
169: *pHwnd++ = (HWND)ci.hUser;
170: }
171:
172: // reconnect
173:
174: if (!(hConv = DdeConnectList(idInst, hszApp, hszTopic, pmci->hConv, &CCFilter))) {
175: MPError(MB_OK, IDS_DDEMLERR, (LPSTR)Error2String(DdeGetLastError(idInst)));
176: DdeFreeStringHandle(idInst, hszApp);
177: DdeFreeStringHandle(idInst, hszTopic);
178: return 0;
179: }
180:
181: // fixup windows corresponding to the new conversations.
182:
183: pmci->hConv = hConv;
184: hConv = NULL;
185: while (hConv = DdeQueryNextServer((HCONVLIST)pmci->hConv, hConv)) {
186: DdeQueryConvInfo(hConv, QID_SYNC, &ci);
187: // preserve corresponding window by setting its list
188: // entry to 0
189: for (pHwnd = aHwnd; pHwnd < &aHwnd[cHwnd]; pHwnd++) {
190: if (*pHwnd == (HWND)ci.hUser) {
191: *pHwnd = NULL;
192: break;
193: }
194: }
195: }
196:
197: // destroy all windows left in the old list
198:
199: for (pHwnd = aHwnd; pHwnd < &aHwnd[cHwnd]; pHwnd++)
200: if (*pHwnd) {
201: SendMessage(hwndMDIClient, WM_MDIDESTROY,
202: (WPARAM)*pHwnd, 0L);
203: }
204: MyFree((PSTR)aHwnd);
205:
206: // create any new windows needed
207:
208: hConv = NULL;
209: while (hConv = DdeQueryNextServer((HCONVLIST)pmci->hConv, hConv)) {
210: DdeQueryConvInfo(hConv, QID_SYNC, &ci);
211: if (ci.hUser) {
212: InvalidateRect((HWND)ci.hUser, NULL, TRUE);
213: } else {
214: AddConv(ci.hszSvcPartner, ci.hszTopic, hConv, FALSE);
215: }
216: }
217:
218: // make list window update itself
219:
220: InvalidateRect(hwndSave, NULL, TRUE);
221: SetFocus(hwndSave);
222: } else {
223: if (!CreateConv(hszApp, hszTopic,
224: IsDlgButtonChecked(hwnd, IDCH_CONNECTLIST))) {
225: MPError(MB_OK, IDS_DDEMLERR, (LPSTR)Error2String(DdeGetLastError(idInst)));
226: return 0;
227: }
228: }
229: DdeFreeStringHandle(idInst, hszApp);
230: DdeFreeStringHandle(idInst, hszTopic);
231: // fall through
232: case IDCANCEL:
233: EndDialog(hwnd, 0);
234: break;
235:
236: default:
237: return(FALSE);
238: }
239: break;
240:
241: default:
242: return(FALSE);
243: }
244: }
245:
246:
247:
248:
249: /*
250: * Fills a XACT structure and calls ProcessTransaction.
251: *
252: * On initiation lParam == hConv.
253: */
254: /****************************************************************************
255: * *
256: * FUNCTION : *
257: * *
258: * PURPOSE : *
259: * *
260: * RETURNS : *
261: * *
262: ****************************************************************************/
263: BOOL APIENTRY TransactDlgProc(
264: HWND hwnd,
265: UINT msg,
266: WPARAM wParam,
267: LPARAM lParam)
268: {
269: static DWORD id2type[] = {
270: XTYP_REQUEST, // IDCH_REQUEST
271: XTYP_ADVSTART, // IDCH_ADVISE
272: XTYP_ADVSTOP, // IDCH_UNADVISE
273: XTYP_POKE, // IDCH_POKE
274: XTYP_EXECUTE, // IDCH_EXECUTE
275: };
276: static XACT *pxact; // ONLY ONE AT A TIME!
277: INT i;
278:
279: switch (msg){
280: case WM_INITDIALOG:
281: pxact = (XACT *)MyAlloc(sizeof(XACT));
282: pxact->hConv = (HCONV)lParam;
283: pxact->fsOptions = DefOptions;
284: pxact->ulTimeout = DefTimeout;
285:
286: // The item index == the index to the format atoms in aFormats[].
287: for (i = 0; i < CFORMATS; i++)
288: SendDlgItemMessage(hwnd, IDCB_FORMAT, CB_INSERTSTRING, i,
289: (DWORD)(LPSTR)aFormats[i].sz);
290: SendDlgItemMessage(hwnd, IDCB_FORMAT, CB_INSERTSTRING, i,
291: (DWORD)(LPSTR)"NULL");
292: SendDlgItemMessage(hwnd, IDCB_FORMAT, CB_SETCURSEL, 0, 0);
293: CheckRadioButton(hwnd, IDCH_REQUEST, IDCH_EXECUTE, IDCH_REQUEST);
294: SendDlgItemMessage(hwnd, IDEF_ITEM, EM_LIMITTEXT, MAX_NAME, 0);
295:
296: // If there is a top transaction window, use its contents to
297: // anticipate what the user will want to do.
298:
299: if (IsWindow(hwndActive)) {
300: HWND hwndXaction;
301: XACT *pxact;
302: PSTR pszItem;
303:
304: hwndXaction = GetWindow(hwndActive, GW_CHILD);
305: if (IsWindow(hwndXaction)) {
306: pxact = (XACT *)GetWindowLong(hwndXaction, GWL_USER);
307: pszItem = GetHSZName(pxact->hszItem);
308: if ((pxact->wType & XTYP_ADVSTART) == XTYP_ADVSTART ||
309: pxact->wType == XTYP_ADVDATA) {
310: CheckRadioButton(hwnd, IDCH_REQUEST, IDCH_EXECUTE, IDCH_UNADVISE);
311: }
312: SetDlgItemText(hwnd, IDEF_ITEM, pszItem);
313: for (i = 0; i < CFORMATS; i++) {
314: if (aFormats[i].fmt == pxact->wFmt) {
315: SendDlgItemMessage(hwnd, IDCB_FORMAT, CB_SETCURSEL, i, 0);
316: break;
317: }
318: }
319: MyFree(pszItem);
320: }
321: }
322: break;
323:
324: case WM_COMMAND:
1.1.1.2 ! root 325: switch (LOWORD(wParam)) {
1.1 root 326: case IDCH_EXECUTE:
327: SetDlgItemText(hwnd, IDEF_ITEM, "");
328: case IDCH_REQUEST:
329: case IDCH_ADVISE:
330: case IDCH_UNADVISE:
331: case IDCH_POKE:
1.1.1.2 ! root 332: EnableWindow(GetDlgItem(hwnd, IDEF_ITEM), LOWORD(wParam) != IDCH_EXECUTE);
! 333: EnableWindow(GetDlgItem(hwnd, IDTX_ITEM), LOWORD(wParam) != IDCH_EXECUTE);
1.1 root 334: break;
335:
336: case IDOK:
337: case IDBN_OPTIONS:
338: {
339: INT id;
340:
341: // set pxact->wType
342:
343: for (id = IDCH_REQUEST; id <= IDCH_EXECUTE; id++) {
344: if (IsDlgButtonChecked(hwnd, id)) {
345: pxact->wType = id2type[id - IDCH_REQUEST];
346: break;
347: }
348: }
349:
1.1.1.2 ! root 350: if (LOWORD(wParam) == IDBN_OPTIONS) {
1.1 root 351: DoDialog(MAKEINTRESOURCE(IDD_ADVISEOPTS),
1.1.1.2 ! root 352: (DLGPROC)AdvOptsDlgProc, (LONG)pxact, TRUE);
1.1 root 353: return 0;
354: }
355:
356: id = (INT)SendDlgItemMessage(hwnd, IDCB_FORMAT, CB_GETCURSEL, 0, 0);
357: if (id == LB_ERR) {
358: return 0;
359: }
360: if (id == CFORMATS)
361: pxact->wFmt = 0;
362: else
363: pxact->wFmt = aFormats[id].fmt;
364:
365: if (pxact->wType == XTYP_ADVSTART) {
366: if (pxact->fsOptions & XOPT_NODATA)
367: pxact->wType |= XTYPF_NODATA;
368: if (pxact->fsOptions & XOPT_ACKREQ)
369: pxact->wType |= XTYPF_ACKREQ;
370: }
371:
372: GetDlgItemText(hwnd, IDEF_ITEM, szT, MAX_NAME);
373: pxact->hszItem = DdeCreateStringHandle(idInst, szT, NULL);
374:
375: pxact->hDdeData = 0;
376: /*
377: * If this transaction needs data, invoke data input dialog.
378: */
379: if (pxact->wType == XTYP_POKE || pxact->wType == XTYP_EXECUTE) {
380: if (!DoDialog(MAKEINTRESOURCE(IDD_TEXTENTRY),
1.1.1.2 ! root 381: (DLGPROC)TextEntryDlgProc, (DWORD)(LPSTR)pxact,
1.1 root 382: TRUE))
383: return 0;
384: }
385:
386: // now start the transaction
387:
388: ProcessTransaction(pxact);
389: MyFree((PSTR)pxact);
390: }
391: EndDialog(hwnd, 1);
392: break;
393:
394: case IDCANCEL:
395: MyFree((PSTR)pxact);
396: EndDialog(hwnd, 0);
397: break;
398:
399: default:
400: return(FALSE);
401: }
402: break;
403:
404: case WM_DESTROY:
405: break;
406:
407: default:
408: return(FALSE);
409: }
410: return 0;
411: }
412:
413:
414:
415:
416:
417:
418:
419: /****************************************************************************
420: * *
421: * FUNCTION : AdvOptsDlgProc *
422: * *
423: * LIMITATIONS: Because we use Get/SetDlgItemInt() the timeout value used *
424: * can't be greater than 65K ms. *
425: * *
426: * RETURNS : *
427: * *
428: ****************************************************************************/
429: BOOL APIENTRY AdvOptsDlgProc(
430: HWND hwnd,
431: UINT msg,
432: WPARAM wParam,
433: LPARAM lParam)
434: {
435: static struct {
436: DWORD id;
437: DWORD opt;
438: } id2Opt[] = {
439: { IDCH_NODATA , XOPT_NODATA } ,
440: { IDCH_ACKREQ , XOPT_ACKREQ } ,
441: { IDCH_DISABLEFIRST , XOPT_DISABLEFIRST } ,
442: { IDCH_ABANDON , XOPT_ABANDONAFTERSTART } ,
443: { IDCH_BLOCKRESULT , XOPT_BLOCKRESULT } ,
444: { IDCH_ASYNC , XOPT_ASYNC } ,
445: };
446: #define CCHBOX 6
447: INT i;
448: static XACT *pxact; // only one instance at a time!!
449:
450: switch (msg){
451: case WM_INITDIALOG:
452: pxact = (XACT *)lParam;
453:
454: for (i = 0; i < CCHBOX; i++) {
455: CheckDlgButton(hwnd, id2Opt[i].id, pxact->fsOptions & id2Opt[i].opt);
456: }
457: SetDlgItemInt(hwnd, IDEF_TIMEOUT, (DWORD)pxact->ulTimeout, FALSE);
458: if (pxact->wType != XTYP_ADVSTART) {
459: EnableWindow(GetDlgItem(hwnd, IDCH_NODATA), FALSE);
460: EnableWindow(GetDlgItem(hwnd, IDCH_ACKREQ), FALSE);
461: }
1.1.1.2 ! root 462: SendMessage(hwnd, WM_COMMAND, (WPARAM)MAKELONG(IDCH_ASYNC, 0), (LONG)(0)); // enable async checkboxes
1.1 root 463: break;
464:
465: case WM_COMMAND:
1.1.1.2 ! root 466: switch (LOWORD(wParam)) {
1.1 root 467: case IDCH_ASYNC:
468: {
469: BOOL fEnable;
470:
471: fEnable = IsDlgButtonChecked(hwnd, IDCH_ASYNC);
472: EnableWindow(GetDlgItem(hwnd, IDCH_DISABLEFIRST), fEnable);
473: EnableWindow(GetDlgItem(hwnd, IDCH_ABANDON), fEnable);
474: EnableWindow(GetDlgItem(hwnd, IDCH_BLOCKRESULT), fEnable);
475: EnableWindow(GetDlgItem(hwnd, IDEF_TIMEOUT), !fEnable);
476: }
477: break;
478:
479: case IDOK:
480: pxact->fsOptions = 0;
481: for (i = 0; i < CCHBOX; i++) {
482: if (IsDlgButtonChecked(hwnd, id2Opt[i].id))
483: pxact->fsOptions |= id2Opt[i].opt;
484: }
485: if (!(pxact->fsOptions & XOPT_ASYNC))
486: pxact->ulTimeout = (DWORD)GetDlgItemInt(hwnd, IDEF_TIMEOUT,
1.1.1.2 ! root 487: (BOOL *)&i, FALSE);
1.1 root 488: // fall through
489: case IDCANCEL:
490: EndDialog(hwnd, 0);
491: break;
492: }
493: break;
494:
495: default:
496: return(FALSE);
497: }
498: return 0;
499: #undef CCHBOX
500: }
501:
502:
503:
504:
505:
506:
507: /****************************************************************************
508: * *
509: * FUNCTION : TextEntryDlgProc *
510: * *
511: * PURPOSE : Allows user to enter text data which is to be sent to a *
512: * server. The user can opt to have a huge text piece of *
513: * data created automaticlly. *
514: * It uses the XACT structure for passing info in and out. *
515: * Must have wFmt and hszItem set on entry. *
516: * Sets hDDEData on return if TRUE was returned. *
517: * *
518: * RETURNS : TRUE on success, FALSE on failure or cancel *
519: * *
520: ****************************************************************************/
521: BOOL APIENTRY TextEntryDlgProc(
522: HWND hwnd,
523: UINT msg,
524: WPARAM wParam,
525: LPARAM lParam)
526: {
527: static XACT FAR *pxact;
528: DWORD cb;
529: LONG length;
530: LPBYTE pData;
531: BOOL fOwned;
532: INT id, i;
533:
534: switch (msg){
535: case WM_INITDIALOG:
536: pxact = (XACT FAR *)lParam;
537: fOwned = FALSE;
538: for (i = 0; i < (INT)cOwned; i++) {
539: if (aOwned[i].wFmt == pxact->wFmt &&
540: aOwned[i].hszItem == pxact->hszItem) {
541: fOwned = TRUE;
542: break;
543: }
544: }
545: EnableWindow(GetDlgItem(hwnd, IDBN_USEOWNED), fOwned);
546: CheckDlgButton(hwnd, IDCH_MAKEOWNED, 0);
547: EnableWindow(GetDlgItem(hwnd, IDCH_MAKEOWNED), cOwned < MAX_OWNED);
548: break;
549:
550: case WM_COMMAND:
1.1.1.2 ! root 551: switch (LOWORD(wParam)) {
1.1 root 552: case IDOK:
553: case IDBN_GENHUGE:
554: fOwned = IsDlgButtonChecked(hwnd, IDCH_MAKEOWNED);
555: cb = SendDlgItemMessage(hwnd, IDEF_DATA, WM_GETTEXTLENGTH, 0, 0) + 1;
556: pxact->hDdeData = DdeCreateDataHandle(idInst, NULL, 0, cb, pxact->hszItem,
557: pxact->wFmt, fOwned ? HDATA_APPOWNED : 0);
558: if (pxact->hDdeData == 0) {
559: MessageBeep(0);
560: return(0);
561: }
562: //
563: // Note that at this time we have not yet given the data handle
564: // to DDEML for transmission to any application, therefore, we
565: // are at liberty to write to it using DdeAccessData() or any
566: // other DDEML api. It is only data handles received from DDEML
567: // or given to DDEML for transmission that are readonly.
568: //
569: pData = DdeAccessData(pxact->hDdeData, NULL);
570: if (pData == NULL) {
571: MessageBeep(0);
572: return(0);
573: }
574: GetDlgItemText(hwnd, IDEF_DATA, pData, (DWORD)cb);
575: DdeUnaccessData(pxact->hDdeData);
1.1.1.2 ! root 576: if (LOWORD(wParam) == IDBN_GENHUGE) {
1.1 root 577: CHAR szT[40];
578:
579: /*
580: * we assume in this case that the text entered is the decimal
581: * value of the size of the huge object desired. We parse
582: * this string and create a randomly generated huge block
583: * of text data and place it into pxact->hDdeData.
584: */
1.1.1.2 ! root 585: memcpy(szT, pData, min((DWORD)cb, 40));
1.1 root 586: szT[39] = '\0';
587: if (sscanf(szT, "%ld", &length) == 1) {
588: DdeFreeDataHandle(pxact->hDdeData);
589: pxact->hDdeData = CreateHugeDataHandle(length, 4325,
590: 345, 5, pxact->hszItem, pxact->wFmt,
591: fOwned ? HDATA_APPOWNED : 0);
592: } else {
593: /*
594: * The string cannot be parsed. Inform the user of
595: * what is expected.
596: */
597: MPError(MB_OK, IDS_BADLENGTH);
598: return 0;
599: }
600: }
601: if (fOwned) {
602: aOwned[cOwned].hData = pxact->hDdeData;
603: aOwned[cOwned].hszItem = pxact->hszItem;
604: aOwned[cOwned].wFmt = pxact->wFmt;
605: cOwned++;
606: }
607: EndDialog(hwnd, TRUE);
608: break;
609:
610: case IDBN_USEOWNED:
611: /*
612: * the user has chosen to use an existing owned data for sending
613: * to the server.
614: */
1.1.1.2 ! root 615: id = DoDialog(MAKEINTRESOURCE(IDD_HDATAVIEW), (DLGPROC)ViewHandleDlgProc,
! 616: (LONG)pxact, TRUE);
1.1 root 617:
618: switch (id) {
619: case IDCANCEL:
620: return(0);
621:
622: case IDOK:
623: EndDialog(hwnd, TRUE);
624:
625: case IDBN_VIEW:
626: pData = DdeAccessData(pxact->hDdeData, NULL);
627: SetDlgItemText(hwnd, IDEF_DATA, pData);
628: DdeUnaccessData(pxact->hDdeData);
629: break;
630: }
631: break;
632:
633: case IDCANCEL:
634: EndDialog(hwnd, FALSE);
635: break;
636: }
637: break;
638:
639: default:
640: return(FALSE);
641: }
642: }
643:
644:
645:
646: BOOL APIENTRY ViewHandleDlgProc(
647: HWND hwnd,
648: UINT msg,
649: WPARAM wParam,
650: LPARAM lParam)
651: {
652: static XACT FAR *pxact;
653: INT i, itm;
654:
655: switch (msg){
656: case WM_INITDIALOG:
657: pxact = (XACT FAR *)lParam;
658: // load listbox with handles that fit pxact constraints
659:
660: for (i = 0; i < (INT)cOwned; i++) {
661: if (aOwned[i].hszItem == pxact->hszItem &&
662: aOwned[i].wFmt == pxact->wFmt) {
663: wsprintf(szT, "[%d] %lx : length=%ld", i, aOwned[i].hData,
664: DdeGetData(aOwned[i].hData, NULL, 0, 0));
665: SendDlgItemMessage(hwnd, IDLB_HANDLES, LB_ADDSTRING, 0, (LONG)(LPSTR)szT);
666: }
667: }
668: SendDlgItemMessage(hwnd, IDLB_HANDLES, LB_SETCURSEL, 0, 0);
669: break;
670:
671: case WM_COMMAND:
1.1.1.2 ! root 672: switch (LOWORD(wParam)) {
1.1 root 673: case IDOK: // use selectted handle
674: case IDBN_DELETE: // delete selected handle
675: case IDBN_VIEW: // view selected handle
676: itm = (INT)SendDlgItemMessage(hwnd, IDLB_HANDLES, LB_GETCURSEL, 0, 0);
677: if (itm != LB_ERR) {
678: SendDlgItemMessage(hwnd, IDLB_HANDLES, LB_GETTEXT, itm, (LONG)(LPSTR)szT);
679: sscanf(szT, "[%d]", &i);
680: pxact->hDdeData = aOwned[i].hData;
1.1.1.2 ! root 681: switch (LOWORD(wParam)) {
1.1 root 682: case IDOK: // use selectted handle
1.1.1.2 ! root 683: EndDialog(hwnd, LOWORD(wParam));
1.1 root 684: break;
685:
686: case IDBN_DELETE: // delete selected handle
687: DdeFreeDataHandle(aOwned[i].hData);
688: aOwned[i] = aOwned[--cOwned];
689: SendDlgItemMessage(hwnd, IDLB_HANDLES, LB_DELETESTRING, itm, 0);
690: if (SendDlgItemMessage(hwnd, IDLB_HANDLES, LB_GETCOUNT, 0, 0) == 0)
691: EndDialog(hwnd, IDCANCEL);
692: break;
693:
694: case IDBN_VIEW: // view selected handle
1.1.1.2 ! root 695: EndDialog(hwnd, LOWORD(wParam));
1.1 root 696: }
697: }
698: break;
699:
700: case IDCANCEL:
701: EndDialog(hwnd, FALSE);
702: break;
703: }
704: break;
705:
706: default:
707: return(FALSE);
708: }
709: }
710:
711:
712:
713: BOOL APIENTRY DelayDlgProc(
714: HWND hwnd,
715: UINT msg,
716: WPARAM wParam,
717: LPARAM lParam)
718: {
719: switch (msg){
720: case WM_INITDIALOG:
721: SetWindowText(hwnd, "Advise data response time");
722: SetDlgItemInt(hwnd, IDEF_VALUE, wDelay, FALSE);
723: SetDlgItemText(hwnd, IDTX_VALUE, "Delay in milliseconds:");
724: break;
725:
726: case WM_COMMAND:
1.1.1.2 ! root 727: switch (LOWORD(wParam)) {
1.1 root 728: case IDOK:
729: wDelay = (DWORD)GetDlgItemInt(hwnd, IDEF_VALUE, NULL, FALSE);
730: case IDCANCEL:
731: EndDialog(hwnd, 0);
732: break;
733:
734: default:
735: return(FALSE);
736: }
737: break;
738:
739: default:
740: return(FALSE);
741: }
742: }
743:
744:
745:
746:
747:
748: /****************************************************************************
749: * *
750: * FUNCTION : TimeoutDlgProc() *
751: * *
752: * PURPOSE : Allows user to alter the synchronous timeout value. *
753: * *
754: * RETURNS : TRUE on success, FALSE on cancel or failure. *
755: * *
756: ****************************************************************************/
757: BOOL APIENTRY TimeoutDlgProc(
758: HWND hwnd,
759: UINT msg,
760: WPARAM wParam,
761: LPARAM lParam)
762: {
763: switch (msg){
764: case WM_INITDIALOG:
765: SetWindowText(hwnd, "Synchronous transaction timeout");
766: SetDlgItemInt(hwnd, IDEF_VALUE, (INT)DefTimeout, FALSE);
767: SetDlgItemText(hwnd, IDTX_VALUE, "Timeout in milliseconds:");
768: break;
769:
770: case WM_COMMAND:
1.1.1.2 ! root 771: switch (LOWORD(wParam)) {
1.1 root 772: case IDOK:
773: DefTimeout = GetDlgItemInt(hwnd, IDEF_VALUE, NULL, FALSE);
774: case IDCANCEL:
775: EndDialog(hwnd, 0);
776: break;
777:
778: default:
779: return(FALSE);
780: }
781: break;
782:
783: default:
784: return(FALSE);
785: }
786: }
787:
788:
789:
790:
791: BOOL APIENTRY ContextDlgProc(
792: HWND hwnd,
793: UINT msg,
794: WPARAM wParam,
795: LPARAM lParam)
796: {
797: BOOL fSuccess;
798:
799: switch (msg){
800: case WM_INITDIALOG:
801: SetDlgItemInt(hwnd, IDEF_FLAGS, CCFilter.wFlags, FALSE);
802: SetDlgItemInt(hwnd, IDEF_COUNTRY, CCFilter.wCountryID, FALSE);
803: SetDlgItemInt(hwnd, IDEF_CODEPAGE, CCFilter.iCodePage, TRUE);
804: SetDlgItemInt(hwnd, IDEF_LANG, CCFilter.dwLangID, FALSE);
805: SetDlgItemInt(hwnd, IDEF_SECURITY, CCFilter.dwSecurity, FALSE);
806: return(1);
807: break;
808:
809: case WM_COMMAND:
1.1.1.2 ! root 810: switch (LOWORD(wParam)) {
1.1 root 811: case IDOK:
812: CCFilter.wFlags = (WORD)GetDlgItemInt(hwnd, IDEF_FLAGS, &fSuccess, FALSE);
813: if (!fSuccess) return(0);
814: CCFilter.wCountryID = (WORD)GetDlgItemInt(hwnd, IDEF_COUNTRY, &fSuccess, FALSE);
815: if (!fSuccess) return(0);
816: CCFilter.iCodePage = GetDlgItemInt(hwnd, IDEF_CODEPAGE, &fSuccess, TRUE);
817: if (!fSuccess) return(0);
818: CCFilter.dwLangID = (DWORD)GetDlgItemInt(hwnd, IDEF_LANG, &fSuccess, FALSE);
819: if (!fSuccess) return(0);
820: CCFilter.dwSecurity = (DWORD)GetDlgItemInt(hwnd, IDEF_SECURITY, &fSuccess, FALSE);
821: if (!fSuccess) return(0);
822: // fall through
823: case IDCANCEL:
824: EndDialog(hwnd, 0);
825: break;
826:
827: default:
828: return(FALSE);
829: }
830: break;
831: }
832: return(FALSE);
833: }
834:
835:
836: VOID Delay(
837: DWORD delay)
838: {
839: MSG msg;
840:
841: delay = GetCurrentTime() + delay;
842: while (GetCurrentTime() < delay) {
843: if (PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE)) {
844: TranslateMessage(&msg);
845: DispatchMessage(&msg);
846: }
847: }
848: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.