|
|
1.1 root 1: /**************************************************************************\
2: * dialogs.c -- dialog procedure support for uconvert
3: *
4: * Steve Firebaugh
5: * Microsoft Developer Support
6: * Copyright (c) 1992, 1993 Microsoft Corporation
7: *
8: \**************************************************************************/
9: #define UNICODE
10:
11:
12: #include <windows.h>
13: #include "uconvert.h"
14: #include "install.h"
15:
16:
17: /* Define affecting the positioning of child windows in dialog. */
18: #define DLGBORDER GetSystemMetrics (SM_CXFRAME)*2
19:
20: /***************************************************************************\
21: * FUNCTION: AboutProc
22: \***************************************************************************/
23: LRESULT CALLBACK AboutProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
24: {
25:
26: switch (message) {
27:
28: case WM_COMMAND:
29: switch (LOWORD (wParam)) {
30: case IDCANCEL:
31: EndDialog (hwnd, FALSE);
32: break;
33:
34: case IDOK:
35: EndDialog (hwnd, TRUE);
36: break;
37: }
38: break; /* end WM_COMMAND */
39:
40:
41: case WM_SYSCOMMAND:
42: if (LOWORD (wParam) == SC_CLOSE)
43: EndDialog (hwnd, FALSE);
44: break;
45:
46: } /* end switch */
47: return FALSE;
48: }
49:
50:
51:
52: /***************************************************************************\
53: * FUNCTION: ConversionOptionsProc
54: *
55: * Fill Dlg with state information on WM_INITDIALOG.
56: * Take it back down and change internal state on WM_COMMAND, IDOK.
57: *
58: * Global variables:
59: * gMBFlags
60: * gWCFlags
61: * glpDefaultChar
62: * glpUsedDefaultChar
63: *
64: \***************************************************************************/
65: LRESULT CALLBACK ConversionOptionsProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
66: {
67:
68: switch (message) {
69:
70: /******************************************************************\
71: * WM_INITDIALOG
72: *
73: * Set radio buttons appropriately.
74: \******************************************************************/
75: case WM_INITDIALOG:
76: if (gMBFlags & MB_PRECOMPOSED)
77: SendDlgItemMessage (hwnd, DID_PRECOMPOSED, BM_SETCHECK, 1, 0);
78:
79: if (gMBFlags & MB_COMPOSITE)
80: SendDlgItemMessage (hwnd, DID_COMPOSITE, BM_SETCHECK, 1, 0);
81:
82: if (gMBFlags & MB_USEGLYPHCHARS)
83: SendDlgItemMessage (hwnd, DID_USEGLYPHCHARS, BM_SETCHECK, 1, 0);
84:
85: if (gMBFlags & WC_COMPOSITECHECK)
86: SendDlgItemMessage (hwnd, DID_COMPOSITECHECK, BM_SETCHECK, 1, 0);
87:
88: if (gMBFlags & WC_DISCARDNS)
89: SendDlgItemMessage (hwnd, DID_DISCARDNS, BM_SETCHECK, 1, 0);
90:
91: if (gMBFlags & WC_SEPCHARS)
92: SendDlgItemMessage (hwnd, DID_SEPCHARS, BM_SETCHECK, 1, 0);
93:
94: if (gMBFlags & WC_DEFAULTCHAR)
95: SendDlgItemMessage (hwnd, DID_DEFAULTCHAR, BM_SETCHECK, 1, 0);
96:
97: SendDlgItemMessage (hwnd, DID_EFDEFAULTCHAR, EM_LIMITTEXT, 1, 0);
98: SetDlgItemTextA (hwnd, DID_EFDEFAULTCHAR, glpDefaultChar);
99:
100: if (gUsedDefaultChar)
101: SendDlgItemMessage (hwnd, DID_USEDDEFAULTCHAR, BM_SETCHECK, 1, 0);
102:
103:
104: SetFocus (GetDlgItem (hwnd, IDOK));
105: return FALSE;
106:
107:
108: case WM_COMMAND:
109: switch (LOWORD (wParam)) {
110: case IDCANCEL:
111: EndDialog (hwnd, FALSE);
112: break;
113:
114: /******************************************************************\
115: * WM_COMMAND, IDOK
116: *
117: * Get state from radio buttons and others.
118: \******************************************************************/
119: case IDOK: {
120:
121: if (SendDlgItemMessage(hwnd, DID_PRECOMPOSED, BM_GETCHECK, 0,0))
122: gMBFlags |= MB_PRECOMPOSED;
123: else
124: gMBFlags &= ~MB_PRECOMPOSED;
125:
126: if (SendDlgItemMessage(hwnd, DID_COMPOSITE, BM_GETCHECK, 0,0))
127: gMBFlags |= MB_COMPOSITE;
128: else
129: gMBFlags &= ~MB_COMPOSITE;
130:
131: if (SendDlgItemMessage(hwnd, DID_USEGLYPHCHARS, BM_GETCHECK, 0,0))
132: gMBFlags |= MB_USEGLYPHCHARS;
133: else
134: gMBFlags &= ~MB_USEGLYPHCHARS;
135:
136: if (SendDlgItemMessage(hwnd, DID_DISCARDNS, BM_GETCHECK, 0,0))
137: gMBFlags |= WC_DISCARDNS;
138: else
139: gMBFlags &= ~WC_DISCARDNS;
140:
141: if (SendDlgItemMessage(hwnd, DID_COMPOSITECHECK, BM_GETCHECK, 0,0))
142: gMBFlags |= WC_COMPOSITECHECK;
143: else
144: gMBFlags &= ~WC_COMPOSITECHECK;
145:
146: if (SendDlgItemMessage(hwnd, DID_SEPCHARS, BM_GETCHECK, 0,0))
147: gMBFlags |= WC_SEPCHARS;
148: else
149: gMBFlags &= ~WC_SEPCHARS;
150:
151: if (SendDlgItemMessage(hwnd, DID_DEFAULTCHAR, BM_GETCHECK, 0,0))
152: gMBFlags |= WC_DEFAULTCHAR;
153: else
154: gMBFlags &= ~WC_DEFAULTCHAR;
155:
156: GetDlgItemTextA (hwnd, DID_EFDEFAULTCHAR, glpDefaultChar, 2); // CHAR + NULL
157:
158: EndDialog (hwnd, TRUE);
159: } break;
160:
161:
162: /******************************************************************\
163: * WM_COMMAND, DID_*
164: *
165: * Manage radio button pattern.
166: \******************************************************************/
167: case DID_PRECOMPOSED:
168: SendDlgItemMessage (hwnd, DID_PRECOMPOSED, BM_SETCHECK, TRUE, 0);
169: SendDlgItemMessage (hwnd, DID_COMPOSITE, BM_SETCHECK, FALSE, 0);
170: break;
171:
172: case DID_COMPOSITE:
173: SendDlgItemMessage (hwnd, DID_PRECOMPOSED, BM_SETCHECK, FALSE, 0);
174: SendDlgItemMessage (hwnd, DID_COMPOSITE, BM_SETCHECK, TRUE, 0);
175: break;
176:
177: }
178: break; /* end WM_COMMAND */
179:
180:
181:
182: case WM_SYSCOMMAND:
183: if (LOWORD (wParam) == SC_CLOSE)
184: EndDialog (hwnd, FALSE);
185: break;
186:
187: } /* end switch */
188: return FALSE;
189: }
190:
191:
192:
193: /***************************************************************************\
194: * FUNCTION: SourceOptionsProc
195: *
196: * Fill Dlg with state information on WM_INITDIALOG.
197: * Take it back down and change internal state on WM_COMMAND, IDOK.
198: *
199: * Global variables:
200: * gTypeSource
201: * giSourceCodePage
202: * giDestinationCodePage
203: *
204: \***************************************************************************/
205: LRESULT CALLBACK SourceOptionsProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
206: {
207: TCHAR buffer[50];
208:
209: switch (message) {
210:
211: /******************************************************************\
212: * WM_INITDIALOG
213: *
214: * Set radio buttons appropriately.
215: \******************************************************************/
216: case WM_INITDIALOG:
217: SetWindowText (hwnd, TEXT("Interpret Source As..."));
218: ListInstalledTables (GetDlgItem (hwnd, DID_CODEPAGELIST),CB_ADDSTRING, TRUE);
219: if (gTypeSource == TYPEUNICODE)
220: SendDlgItemMessage (hwnd, DID_RBUNICODE, BM_SETCHECK, 1, 0);
221:
222: /*
223: * if gTypeSource == TYPECODEPAGE, then see if it is one of the
224: * standard radio buttons. If so, check the right one.
225: * if not, check, "other" and select correct entry in combobox.
226: */
227: else if (gTypeSource == TYPECODEPAGE) {
228: if (giSourceCodePage == GetACP())
229: SendDlgItemMessage (hwnd, DID_RBANSICP, BM_SETCHECK, 1, 0);
230: else if (giSourceCodePage == GetOEMCP())
231: SendDlgItemMessage (hwnd, DID_RBOEMCP, BM_SETCHECK, 1, 0);
232: else {
233: SendDlgItemMessage (hwnd, DID_RBOTHERCP, BM_SETCHECK, 1, 0);
234: wsprintf (buffer, TEXT("%d"), giSourceCodePage);
235: SendDlgItemMessage (hwnd, DID_CODEPAGELIST, CB_SELECTSTRING, 0, (LPARAM)buffer);
236: }
237: } else {
238: // OK to not be specified here. Wait for user to make choice.
239: }
240:
241:
242: SetFocus (GetDlgItem (hwnd, IDOK));
243: return FALSE;
244:
245:
246: case WM_COMMAND:
247: switch (LOWORD (wParam)) {
248: case IDCANCEL:
249: EndDialog (hwnd, FALSE);
250: break;
251:
252: /******************************************************************\
253: * WM_COMMAND, IDOK
254: *
255: * Get state from radio buttons and others.
256: \******************************************************************/
257: case IDOK: {
258: BOOL success;
259:
260: if (SendDlgItemMessage(hwnd, DID_RBUNICODE, BM_GETCHECK, 0,0)) {
261: gTypeSource = TYPEUNICODE;
262: } else if (SendDlgItemMessage(hwnd, DID_RBANSICP, BM_GETCHECK, 0,0)) {
263: gTypeSource = TYPECODEPAGE;
264: giSourceCodePage=GetACP();
265: } else if (SendDlgItemMessage(hwnd, DID_RBOEMCP, BM_GETCHECK, 0,0)) {
266: gTypeSource = TYPECODEPAGE;
267: giSourceCodePage=GetOEMCP();
268: } else if (SendDlgItemMessage(hwnd, DID_RBOTHERCP, BM_GETCHECK, 0,0)) {
269: gTypeSource = TYPECODEPAGE;
270: giSourceCodePage=GetDlgItemInt (hwnd, DID_CODEPAGELIST, &success, FALSE);
271: } else
272: gTypeSource = TYPEUNKNOWN;
273: EndDialog (hwnd, TRUE);
274: } break;
275: }
276: break; /* end WM_COMMAND */
277:
278:
279: case WM_SYSCOMMAND:
280: if (LOWORD (wParam) == SC_CLOSE)
281: EndDialog (hwnd, FALSE);
282: break;
283:
284: } /* end switch */
285: return FALSE;
286: }
287:
288: /***************************************************************************\
289: * FUNCTION: DestinationOptionsProc
290: *
291: * Fill Dlg with state information on WM_INITDIALOG.
292: * Take it back down and change internal state on WM_COMMAND, IDOK.
293: *
294: *
295: * Global variables:
296: * gTypeSource
297: * giSourceCodePage
298: * giDestinationCodePage
299: *
300: \***************************************************************************/
301: LRESULT CALLBACK DestinationOptionsProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
302: {
303: TCHAR buffer[50];
304:
305: switch (message) {
306:
307: /******************************************************************\
308: * WM_INITDIALOG
309: *
310: * Set radio buttons appropriately.
311: \******************************************************************/
312: case WM_INITDIALOG:
313: SetWindowText (hwnd, TEXT("Convert Destination To..."));
314: ListInstalledTables (GetDlgItem (hwnd, DID_CODEPAGELIST),CB_ADDSTRING, TRUE);
315:
316: /* if source is unicode, destination will be code page. */
317: if (gTypeSource == TYPEUNICODE) {
318: EnableWindow (GetDlgItem (hwnd, DID_RBUNICODE), FALSE);
319:
320: if (giDestinationCodePage == GetACP())
321: SendDlgItemMessage (hwnd, DID_RBANSICP, BM_SETCHECK, 1, 0);
322: else if (giDestinationCodePage == GetOEMCP())
323: SendDlgItemMessage (hwnd, DID_RBOEMCP, BM_SETCHECK, 1, 0);
324: else {
325: SendDlgItemMessage (hwnd, DID_RBOTHERCP, BM_SETCHECK, 1, 0);
326: wsprintf (buffer, TEXT("%d"), giDestinationCodePage);
327: SendDlgItemMessage (hwnd, DID_CODEPAGELIST, CB_SELECTSTRING, 0, (LPARAM)buffer);
328: }
329:
330: /* otherwise destination is unicode, so disable most of the checkboxes. */
331: } else if (gTypeSource == TYPECODEPAGE) {
332: SendDlgItemMessage (hwnd, DID_RBUNICODE, BM_SETCHECK, 1, 0);
333: EnableWindow (GetDlgItem (hwnd, DID_RBANSICP), FALSE);
334: EnableWindow (GetDlgItem (hwnd, DID_RBOEMCP), FALSE);
335: EnableWindow (GetDlgItem (hwnd, DID_RBOTHERCP), FALSE);
336: EnableWindow (GetDlgItem (hwnd, DID_CODEPAGELIST), FALSE);
337: } else {
338: EndDialog (hwnd, FALSE); // shouldn't get here.
339: }
340:
341: SetFocus (GetDlgItem (hwnd, IDOK));
342: return FALSE;
343:
344:
345: case WM_COMMAND:
346: switch (LOWORD (wParam)) {
347: case IDCANCEL:
348: EndDialog (hwnd, FALSE);
349: break;
350:
351: /******************************************************************\
352: * WM_COMMAND, IDOK
353: *
354: * Get state from radio buttons and others.
355: \******************************************************************/
356: case IDOK: {
357: BOOL success;
358: if (SendDlgItemMessage(hwnd, DID_RBUNICODE, BM_GETCHECK, 0,0)) {
359: // Do nothing. gTypeSource already implies dest <-> unicode.
360: } else if (SendDlgItemMessage(hwnd, DID_RBANSICP, BM_GETCHECK, 0,0)) {
361: giDestinationCodePage=GetACP();
362: } else if (SendDlgItemMessage(hwnd, DID_RBOEMCP, BM_GETCHECK, 0,0)) {
363: giDestinationCodePage=GetOEMCP();
364: } else if (SendDlgItemMessage(hwnd, DID_RBOTHERCP, BM_GETCHECK, 0,0)) {
365: giDestinationCodePage=GetDlgItemInt (hwnd, DID_CODEPAGELIST, &success, FALSE);
366: }
367:
368: EndDialog (hwnd, TRUE);
369: } break;
370: }
371: break; /* end WM_COMMAND */
372:
373: case WM_SYSCOMMAND:
374: if (LOWORD (wParam) == SC_CLOSE)
375: EndDialog (hwnd, FALSE);
376: break;
377:
378: } /* end switch */
379: return FALSE;
380: }
381:
382:
383: /***************************************************************************\
384: * FUNCTION: ViewSourceProc
385: *
386: * Fill Text, Name, and Type information into the dialog.
387: * Set a proper font to display the text depending on what type it is.
388: *
389: \***************************************************************************/
390: LRESULT CALLBACK ViewSourceProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
391: {
392: RECT rect;
393:
394: switch (message) {
395:
396: /******************************************************************\
397: * WM_INITDIALOG
398: \******************************************************************/
399: case WM_INITDIALOG:
400:
401: /* Text is unicode... use *W() variants of functions. */
402: if (gTypeSource == TYPEUNICODE) {
403: WCHAR buffer[MAX_PATH];
404: LOGFONTW logfont;
405: HFONT hFont;
406:
407: SetWindowTextW (GetDlgItem (hwnd, DID_TEXT), (LPCWSTR)pSourceData);
408: GetWindowTextW (hwndName0, buffer, MAX_PATH);
409: SetWindowTextW (GetDlgItem (hwnd, DID_NAME), buffer);
410: GetWindowTextW (hwndCodePage0, buffer, MAX_PATH);
411: SetWindowTextW (GetDlgItem (hwnd, DID_TYPE), buffer);
412:
413: GetObjectW (GetStockObject (SYSTEM_FONT), sizeof(LOGFONTW), &logfont);
414: logfont.lfCharSet = UNICODE_CHARSET;
415: lstrcpyW (logfont.lfFaceName, L"Lucida Sans Unicode");
416: hFont = CreateFontIndirectW (&logfont);
417: SendMessageW (GetDlgItem (hwnd, DID_TEXT), WM_SETFONT, (WPARAM) hFont, 0);
418:
419:
420: /* Text is codepage... use *A() variants of functions. */
421: } else {
422: char buffer[MAX_PATH];
423: LOGFONTA logfont;
424: HFONT hFont;
425:
426: SetWindowTextA (GetDlgItem (hwnd, DID_TEXT), pSourceData);
427: GetWindowTextA (hwndName0, buffer, MAX_PATH);
428: SetWindowTextA (GetDlgItem (hwnd, DID_NAME), buffer);
429: GetWindowTextA (hwndCodePage0, buffer, MAX_PATH);
430: SetWindowTextA (GetDlgItem (hwnd, DID_TYPE), buffer);
431:
432: GetObjectA (GetStockObject (SYSTEM_FONT), sizeof(LOGFONTA), &logfont);
433: logfont.lfCharSet = giSourceCodePage;
434: lstrcpyA (logfont.lfFaceName, "");
435: hFont = CreateFontIndirectA (&logfont);
436: SendMessageA (GetDlgItem (hwnd, DID_TEXT), WM_SETFONT, (WPARAM) hFont, 0);
437:
438: }
439: SetWindowText (hwnd, TEXT("View Source"));
440: GetClientRect (hwnd, &rect);
441: SendMessage (hwnd, WM_SIZE, 0,
442: MAKELPARAM ((rect.right - rect.left), (rect.bottom - rect.top)));
443: break;
444:
445: case WM_SIZE: {
446: HWND hwndText;
447:
448: hwndText = GetDlgItem (hwnd, DID_TEXT);
449: MoveWindow (hwndText, DLGBORDER, 60, (int) LOWORD(lParam) - 2*DLGBORDER,
450: (int) HIWORD(lParam) - 60 - DLGBORDER , TRUE);
451: }
452:
453: case WM_COMMAND:
454: switch (LOWORD (wParam)) {
455: case IDCANCEL:
456: case IDOK:
457: EndDialog (hwnd, TRUE);
458: }
459: break; /* end WM_COMMAND */
460:
461: case WM_SYSCOMMAND:
462: if (LOWORD (wParam) == SC_CLOSE)
463: EndDialog (hwnd, FALSE);
464: break;
465:
466: } /* end switch */
467: return FALSE;
468: }
469:
470:
471:
472: /***************************************************************************\
473: * FUNCTION: ViewDestinationProc
474: *
475: * Fill Text, Name, and Type information into the dialog.
476: * Set a proper font to display the text depending on what type it is.
477: *
478: \***************************************************************************/
479: LRESULT CALLBACK ViewDestinationProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
480: {
481: RECT rect;
482:
483: switch (message) {
484:
485: /******************************************************************\
486: * WM_INITDIALOG
487: \******************************************************************/
488: case WM_INITDIALOG:
489:
490: /* Destination text is unicode... use *W() variants of functions. */
491: if (gTypeSource != TYPEUNICODE) {
492: WCHAR buffer[MAX_PATH];
493: LOGFONTW logfont;
494: HFONT hFont;
495:
496: SetWindowTextW (GetDlgItem (hwnd, DID_TEXT), (LPCWSTR)pDestinationData);
497: GetWindowTextW (hwndName1, buffer, MAX_PATH);
498: SetWindowTextW (GetDlgItem (hwnd, DID_NAME), buffer);
499: GetWindowTextW (hwndCodePage1, buffer, MAX_PATH);
500: SetWindowTextW (GetDlgItem (hwnd, DID_TYPE), buffer);
501:
502: GetObjectW (GetStockObject (SYSTEM_FONT), sizeof(LOGFONTW), &logfont);
503: logfont.lfCharSet = UNICODE_CHARSET;
504: lstrcpyW (logfont.lfFaceName, L"Lucida Sans Unicode");
505: hFont = CreateFontIndirectW (&logfont);
506: SendMessageW (GetDlgItem (hwnd, DID_TEXT), WM_SETFONT, (WPARAM) hFont, 0);
507:
508:
509: /* Destination text is codepage... use *A() variants of functions. */
510: } else {
511: char buffer[MAX_PATH];
512: LOGFONTA logfont;
513: HFONT hFont;
514:
515: SetWindowTextA (GetDlgItem (hwnd, DID_TEXT), pDestinationData);
516: GetWindowTextA (hwndName1, buffer, MAX_PATH);
517: SetWindowTextA (GetDlgItem (hwnd, DID_NAME), buffer);
518: GetWindowTextA (hwndCodePage1, buffer, MAX_PATH);
519: SetWindowTextA (GetDlgItem (hwnd, DID_TYPE), buffer);
520:
521: GetObjectA (GetStockObject (SYSTEM_FONT), sizeof(LOGFONTA), &logfont);
522: logfont.lfCharSet = giDestinationCodePage;
523: lstrcpyA (logfont.lfFaceName, "");
524: hFont = CreateFontIndirectA (&logfont);
525: SendMessageA (GetDlgItem (hwnd, DID_TEXT), WM_SETFONT, (WPARAM) hFont, 0);
526:
527: }
528: SetWindowText (hwnd, TEXT("View Destination"));
529: GetClientRect (hwnd, &rect);
530: SendMessage (hwnd, WM_SIZE, 0,
531: MAKELPARAM ((rect.right - rect.left),(rect.bottom - rect.top)));
532:
533: break;
534:
535:
536: case WM_SIZE: {
537: HWND hwndText;
538:
539: hwndText = GetDlgItem (hwnd, DID_TEXT);
540: MoveWindow (hwndText, DLGBORDER, 60, (int) LOWORD(lParam) - 2*DLGBORDER,
541: (int) HIWORD(lParam) - 60 - DLGBORDER , TRUE);
542: }
543:
544: case WM_COMMAND:
545: switch (LOWORD (wParam)) {
546: case IDCANCEL:
547: case IDOK:
548: EndDialog (hwnd, TRUE);
549: }
550: break; /* end WM_COMMAND */
551:
552: case WM_SYSCOMMAND:
553: if (LOWORD (wParam) == SC_CLOSE)
554: EndDialog (hwnd, FALSE);
555: break;
556:
557: } /* end switch */
558: return FALSE;
559: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.