Annotation of mstools/samples/sdktools/dlgedit/styles.c, revision 1.1.1.1

1.1       root        1: 
                      2: /******************************************************************************\
                      3: *       This is a part of the Microsoft Source Code Samples. 
                      4: *       Copyright (C) 1993 Microsoft Corporation.
                      5: *       All rights reserved. 
                      6: *       This source code is only intended as a supplement to 
                      7: *       Microsoft Development Tools and/or WinHelp documentation.
                      8: *       See these sources for detailed information regarding the 
                      9: *       Microsoft samples programs.
                     10: \******************************************************************************/
                     11: 
                     12: /****************************** Module Header *******************************
                     13: * Module Name: styles.c
                     14: *
                     15: * Handles the control styles selection, including the styles dialogs.
                     16: *
                     17: * Functions:
                     18: *
                     19: *    StylesDialog()
                     20: *    GenericStylesDlgProc()
                     21: *    CheckBoxStylesDlgProc()
                     22: *    RadioButtonStylesDlgProc()
                     23: *    PushButtonStylesDlgProc()
                     24: *    ComboBoxStylesDlgProc()
                     25: *    EditStylesDlgProc()
                     26: *    ListBoxStylesDlgProc()
                     27: *    CustomStylesDlgProc()
                     28: *    DialogStylesDlgProc()
                     29: *    FontNameEnumFunc()
                     30: *    PointSizeEnumFunc()
                     31: *    EnableComboBoxStyles()
                     32: *    EnableEditStyles()
                     33: *    EnableListBoxStyles()
                     34: *    SetCustomStylesField()
                     35: *    GetCustomStylesField()
                     36: *    EnableDialogStyles()
                     37: *    FillFontNameCombo()
                     38: *    FillPointSizeCombo()
                     39: *    AddToPointSizeCombo()
                     40: *    FillLanguageCombo()
                     41: *    FillSubLanguageCombo()
                     42: *    CheckStyleBoxes()
                     43: *    QueryCheckedStyles()
                     44: *    StylesHelp()
                     45: *
                     46: * Comments:
                     47: *
                     48: ****************************************************************************/
                     49: 
                     50: #include "dlgedit.h"
                     51: #include "dlgfuncs.h"
                     52: #include "dlgextrn.h"
                     53: #include "dialogs.h"
                     54: 
                     55: 
                     56: STATICFN VOID EnableComboBoxStyles(HWND hwnd, INT idCtrl);
                     57: STATICFN VOID EnableEditStyles(HWND hwnd, INT idCtrl);
                     58: STATICFN VOID EnableListBoxStyles(HWND hwnd, INT idCtrl);
                     59: STATICFN VOID SetCustomStylesField(HWND hwnd, DWORD flStyle);
                     60: STATICFN DWORD GetCustomStylesField(HWND hwnd);
                     61: STATICFN VOID EnableDialogStyles(HWND hwnd, INT idCtrl);
                     62: STATICFN VOID FillFontNameCombo(HWND hwndDlg);
                     63: STATICFN VOID FillPointSizeCombo(HWND hwndDlg, LPTSTR pszFaceName);
                     64: STATICFN VOID AddToPointSizeCombo(HWND hwndCombo, INT nPointSize);
                     65: STATICFN VOID FillLanguageCombo(HWND hwndDlg);
                     66: STATICFN VOID FillSubLanguageCombo(HWND hwndDlg, INT iLang);
                     67: STATICFN VOID CheckStyleBoxes(HWND hwnd, INT iClass, DWORD flStyle);
                     68: STATICFN VOID QueryCheckedStyles(HWND hwnd, INT iClass, DWORD *pflStyle);
                     69: STATICFN VOID StylesHelp(VOID);
                     70: 
                     71: /*
                     72:  * Global pointer to the CTYPE for the control or dialog whose styles
                     73:  * are being worked on.  All the styles dialog procs and workers use
                     74:  * this pointer.
                     75:  */
                     76: static NPCTYPE npcStyles;
                     77: 
                     78: /*
                     79:  * Globals that receive the new styles the user selected.
                     80:  */
                     81: static DWORD flStyleNew;
                     82: static DWORD flExtStyleNew;
                     83: static LPTSTR pszTextNew;
                     84: static DIALOGINFO diNew;
                     85: 
                     86: 
                     87: 
                     88: /************************************************************************
                     89: * StylesDialog
                     90: *
                     91: * Displays the appropriate styles dialog for the currently selected
                     92: * control.  If the user OK's the changes, this function sets the
                     93: * style of the control.
                     94: *
                     95: ************************************************************************/
                     96: 
                     97: VOID StylesDialog(VOID)
                     98: {
                     99:     NPCTYPE npc;
                    100:     HWND hwndOld;
                    101:     INT fDlgResult;
                    102:     BOOL fChanged = FALSE;
                    103:     BOOL fFontChanged = FALSE;
                    104:     TCHAR szClassNew[CCHTEXTMAX];
                    105:     TCHAR szMenuNew[CCHTEXTMAX];
                    106:     TCHAR szTextNew[CCHTEXTMAX];
                    107: 
                    108:     /*
                    109:      * Quit if nothing was selected, or if we are in translate mode.
                    110:      */
                    111:     if (!gnpcSel || gfTranslateMode)
                    112:         return;
                    113: 
                    114:     /*
                    115:      * Set globals that the styles dialogs and worker routines will use.
                    116:      */
                    117:     npcStyles = gnpcSel;
                    118:     flStyleNew = npcStyles->flStyle;
                    119:     flExtStyleNew = npcStyles->flExtStyle;
                    120: 
                    121:     if (npcStyles->text)
                    122:         NameOrdCpy(szTextNew, npcStyles->text);
                    123:     else
                    124:         *szTextNew = CHAR_NULL;
                    125: 
                    126:     pszTextNew = szTextNew;
                    127: 
                    128:     /*
                    129:      * Set some other globals if this is the dialog instead of a control.
                    130:      */
                    131:     if (gfDlgSelected) {
                    132:         diNew.fResFlags = gcd.di.fResFlags;
                    133:         diNew.wLanguage = gcd.di.wLanguage;
                    134:         diNew.DataVersion = gcd.di.DataVersion;
                    135:         diNew.Version = gcd.di.Version;
                    136:         diNew.Characteristics = gcd.di.Characteristics;
                    137: 
                    138:         lstrcpy(diNew.szFontName, gcd.di.szFontName);
                    139:         diNew.nPointSize = gcd.di.nPointSize;
                    140: 
                    141:         diNew.pszClass = szClassNew;
                    142:         if (gcd.di.pszClass)
                    143:             NameOrdCpy(szClassNew, gcd.di.pszClass);
                    144:         else
                    145:             *szClassNew = CHAR_NULL;
                    146: 
                    147:         diNew.pszMenu = szMenuNew;
                    148:         if (gcd.di.pszMenu)
                    149:             NameOrdCpy(szMenuNew, gcd.di.pszMenu);
                    150:         else
                    151:             *szMenuNew = CHAR_NULL;
                    152:     }
                    153: 
                    154:     /*
                    155:      * Is this a custom control that has a styles proc to use?
                    156:      */
                    157:     if (npcStyles->pwcd->iType == W_CUSTOM && npcStyles->pwcd->lpfnStyle) {
                    158:         fDlgResult = CallCustomStyle(npcStyles, &flStyleNew, &flExtStyleNew,
                    159:             szTextNew);
                    160:     }
                    161:     else {
                    162:         /*
                    163:          * Show the appropriate styles dialog.
                    164:          */
                    165:         fDlgResult = DlgBox(npcStyles->pwcd->idStylesDialog,
                    166:                 (WNDPROC)npcStyles->pwcd->pfnStylesDlgProc);
                    167:     }
                    168: 
                    169:     if (fDlgResult == IDOK) {
                    170:         /*
                    171:          * Now go through and determine if anything was really changed.
                    172:          */
                    173:         if (npcStyles->flStyle != flStyleNew ||
                    174:                 npcStyles->flExtStyle != flExtStyleNew ||
                    175:                 NameOrdCmp(npcStyles->text ?
                    176:                 npcStyles->text : szEmpty, szTextNew) != 0)
                    177:             fChanged = TRUE;
                    178: 
                    179:         /*
                    180:          * If this is the dialog, check if some other things were changed.
                    181:          */
                    182:         if (gfDlgSelected) {
                    183:             if (gcd.di.fResFlags != diNew.fResFlags ||
                    184:                     gcd.di.wLanguage != diNew.wLanguage ||
                    185:                     NameOrdCmp(gcd.di.pszClass ?
                    186:                     gcd.di.pszClass : szEmpty, diNew.pszClass) != 0 ||
                    187:                     NameOrdCmp(gcd.di.pszMenu ?
                    188:                     gcd.di.pszMenu : szEmpty, diNew.pszMenu) != 0)
                    189:                 fChanged = TRUE;
                    190: 
                    191:             if (lstrcmp(gcd.di.szFontName, diNew.szFontName) != 0 ||
                    192:                     (*diNew.szFontName &&
                    193:                     gcd.di.nPointSize != diNew.nPointSize))
                    194:                 fChanged = fFontChanged = TRUE;
                    195:         }
                    196:     }
                    197: 
                    198:     /*
                    199:      * Did something change?
                    200:      */
                    201:     if (fChanged) {
                    202:         if (gfDlgSelected) {
                    203:             hwndOld = npcStyles->hwnd;
                    204:             CreateControl(npcStyles, pszTextNew, flStyleNew, flExtStyleNew,
                    205:                     npcStyles->id, &npcStyles->rc, (HWND)NULL, &diNew);
                    206: 
                    207:             /*
                    208:              * Create all the control windows in the new dialog.
                    209:              * They must be created (not just moved over by changing
                    210:              * the parent and owner) because some controls have
                    211:              * allocated memory on the old dialogs heap, and this
                    212:              * heap will become invalid after the old dialog
                    213:              * is destroyed below. 
                    214:              */
                    215:             for (npc = npcHead; npc; npc = npc->npcNext) {
                    216:                 /*
                    217:                  * If this is an icon control and the dialog font
                    218:                  * was just changed, we need to resize the control
                    219:                  * based on the new default icon size.
                    220:                  */
                    221:                 if (npc->pwcd->iType == W_ICON && fFontChanged) {
                    222:                     npc->rc.right = npc->rc.left + awcd[W_ICON].cxDefault;
                    223:                     npc->rc.bottom = npc->rc.top + awcd[W_ICON].cyDefault;
                    224:                 }
                    225: 
                    226:                 CreateControl(npc, npc->text, npc->flStyle, npc->flExtStyle,
                    227:                         npc->id, &npc->rc, (HWND)NULL, NULL);
                    228:             }
                    229: 
                    230:             /*
                    231:              * Now move all the drag windows over to the new dialog.
                    232:              * This must be done after creating all the controls
                    233:              * because of the touchy Z-order that the drag windows
                    234:              * and the controls must have for painting and selection
                    235:              * of the drag windows to work properly.  Note that we
                    236:              * rely on SetParent to add the window at
                    237:              * the TOP in Z-order.
                    238:              */
                    239:             for (npc = npcHead; npc; npc = npc->npcNext) {
                    240:                 SetParent(npc->hwndDrag, npcStyles->hwnd);
                    241: 
                    242:                 /*
                    243:                  * Adjust the position of the drag window.
                    244:                  */
                    245:                 SizeDragToControl(npc);
                    246:             }
                    247: 
                    248:             ShowWindow(npcStyles->hwnd, SW_SHOWNA);
                    249:             ToolboxOnTop();
                    250:             DestroyWindow(hwndOld);
                    251:         }
                    252:         else {
                    253:             hwndOld = npcStyles->hwnd;
                    254: 
                    255:             if (CreateControl(npcStyles, pszTextNew, flStyleNew, flExtStyleNew,
                    256:                     npcStyles->id, &npcStyles->rc, hwndOld, NULL)) {
                    257:                 /*
                    258:                  * Get rid of the old control window.
                    259:                  */
                    260:                 DestroyWindow(hwndOld);
                    261: 
                    262:                 /*
                    263:                  * Adjust the size and position of its drag window.
                    264:                  */
                    265:                 SizeDragToControl(npcStyles);
                    266:             }
                    267:         }
                    268: 
                    269:         gfResChged = gfDlgChanged = TRUE;
                    270:         ShowFileStatus(FALSE);
                    271:         StatusUpdate();
                    272:         StatusSetEnable();
                    273:     }
                    274: }
                    275: 
                    276: 
                    277: 
                    278: /************************************************************************
                    279: * GenericStylesDlgProc
                    280: *
                    281: * Dialog procedure for styles.
                    282: *
                    283: ************************************************************************/
                    284: 
                    285: DIALOGPROC GenericStylesDlgProc(
                    286:     HWND hwnd,
                    287:     UINT msg,
                    288:     WPARAM wParam,
                    289:     LPARAM lParam)
                    290: {
                    291:     switch (msg) {
                    292:         case WM_INITDIALOG:
                    293:             CheckStyleBoxes(hwnd, npcStyles->pwcd->iClass,
                    294:                     npcStyles->flStyle);
                    295:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                    296: 
                    297:             CenterWindow(hwnd);
                    298: 
                    299:             return TRUE;
                    300: 
                    301:         case WM_COMMAND:
                    302:             switch (LOWORD(wParam)) {
                    303:                 case IDOK:
                    304:                     QueryCheckedStyles(hwnd, npcStyles->pwcd->iClass,
                    305:                             &flStyleNew);
                    306:                     QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                    307:                     EndDialog(hwnd, IDOK);
                    308:                     return TRUE;
                    309: 
                    310:                 case IDCANCEL:
                    311:                     EndDialog(hwnd, IDCANCEL);
                    312:                     return TRUE;
                    313: 
                    314:                 case IDHELP:
                    315:                     StylesHelp();
                    316:                     break;
                    317:             }
                    318: 
                    319:             return FALSE;
                    320: 
                    321:         default:
                    322:             return FALSE;
                    323:     }
                    324: }
                    325: 
                    326: 
                    327: 
                    328: /************************************************************************
                    329: * CheckBoxStylesDlgProc
                    330: *
                    331: * Dialog procedure for checkboxes.
                    332: *
                    333: ************************************************************************/
                    334: 
                    335: DIALOGPROC CheckBoxStylesDlgProc(
                    336:     HWND hwnd,
                    337:     UINT msg,
                    338:     WPARAM wParam,
                    339:     LPARAM lParam)
                    340: {
                    341:     DWORD dwType;
                    342:     BOOL f3State;
                    343:     BOOL fAuto;
                    344: 
                    345:     switch (msg) {
                    346:         case WM_INITDIALOG:
                    347:             CheckStyleBoxes(hwnd, npcStyles->pwcd->iClass,
                    348:                     npcStyles->flStyle);
                    349:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                    350: 
                    351:             dwType = npcStyles->flStyle & BS_ALL;
                    352:             if (dwType == BS_AUTOCHECKBOX || dwType == BS_AUTO3STATE)
                    353:                 CheckDlgButton(hwnd, DID_BS_AUTOXXX, 1);
                    354: 
                    355:             if (dwType == BS_3STATE || dwType == BS_AUTO3STATE)
                    356:                 CheckDlgButton(hwnd, DID_BS_3STATE, 1);
                    357: 
                    358:             CenterWindow(hwnd);
                    359: 
                    360:             return TRUE;
                    361: 
                    362:         case WM_COMMAND:
                    363:             switch (LOWORD(wParam)) {
                    364:                 case IDOK:
                    365:                     QueryCheckedStyles(hwnd, npcStyles->pwcd->iClass,
                    366:                             &flStyleNew);
                    367:                     QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                    368: 
                    369:                     fAuto = IsDlgButtonChecked(hwnd, DID_BS_AUTOXXX);
                    370:                     f3State = IsDlgButtonChecked(hwnd, DID_BS_3STATE);
                    371:                     flStyleNew &= ~BS_ALL;
                    372:                     if (fAuto) {
                    373:                         if (f3State)
                    374:                             flStyleNew |= BS_AUTO3STATE;
                    375:                         else
                    376:                             flStyleNew |= BS_AUTOCHECKBOX;
                    377:                     }
                    378:                     else {
                    379:                         if (f3State)
                    380:                             flStyleNew |= BS_3STATE;
                    381:                         else
                    382:                             flStyleNew |= BS_CHECKBOX;
                    383:                     }
                    384: 
                    385:                     EndDialog(hwnd, IDOK);
                    386:                     return TRUE;
                    387: 
                    388:                 case IDCANCEL:
                    389:                     EndDialog(hwnd, IDCANCEL);
                    390:                     return TRUE;
                    391: 
                    392:                 case IDHELP:
                    393:                     StylesHelp();
                    394:                     break;
                    395:             }
                    396: 
                    397:             return FALSE;
                    398: 
                    399:         default:
                    400:             return FALSE;
                    401:     }
                    402: }
                    403: 
                    404: 
                    405: 
                    406: /************************************************************************
                    407: * RadioButtonStylesDlgProc
                    408: *
                    409: * Dialog box procedure for radio buttons.
                    410: *
                    411: ************************************************************************/
                    412: 
                    413: DIALOGPROC RadioButtonStylesDlgProc(
                    414:     HWND hwnd,
                    415:     UINT msg,
                    416:     WPARAM wParam,
                    417:     LPARAM lParam)
                    418: {
                    419:     switch (msg) {
                    420:         case WM_INITDIALOG:
                    421:             CheckStyleBoxes(hwnd, npcStyles->pwcd->iClass,
                    422:                     npcStyles->flStyle);
                    423:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                    424: 
                    425:             if ((npcStyles->flStyle & BS_ALL) == BS_AUTORADIOBUTTON)
                    426:                 CheckDlgButton(hwnd, DID_BS_AUTOXXX, 1);
                    427: 
                    428:             CenterWindow(hwnd);
                    429: 
                    430:             return TRUE;
                    431: 
                    432:         case WM_COMMAND:
                    433:             switch (LOWORD(wParam)) {
                    434:                 case IDOK:
                    435:                     QueryCheckedStyles(hwnd, npcStyles->pwcd->iClass,
                    436:                             &flStyleNew);
                    437:                     QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                    438: 
                    439:                     flStyleNew &= ~BS_ALL;
                    440:                     if (IsDlgButtonChecked(hwnd, DID_BS_AUTOXXX))
                    441:                         flStyleNew |= BS_AUTORADIOBUTTON;
                    442:                     else
                    443:                         flStyleNew |= BS_RADIOBUTTON;
                    444: 
                    445:                     EndDialog(hwnd, IDOK);
                    446:                     return TRUE;
                    447: 
                    448:                 case IDCANCEL:
                    449:                     EndDialog(hwnd, IDCANCEL);
                    450:                     return TRUE;
                    451: 
                    452:                 case IDHELP:
                    453:                     StylesHelp();
                    454:                     break;
                    455:             }
                    456: 
                    457:             return FALSE;
                    458: 
                    459:         default:
                    460:             return FALSE;
                    461:     }
                    462: }
                    463: 
                    464: 
                    465: 
                    466: /************************************************************************
                    467: * PushButtonStylesDlgProc
                    468: *
                    469: * We do not normally allow more than one default push button in a
                    470: * dialog. but if this button is already a default button, we must
                    471: * allow them to change it to a normal one, even if there is already
                    472: * another default button in the dialog.  Note that this condition
                    473: * would normally never happen, unless they read in a res file with
                    474: * this condition already.
                    475: *
                    476: ************************************************************************/
                    477: 
                    478: DIALOGPROC PushButtonStylesDlgProc(
                    479:     HWND hwnd,
                    480:     UINT msg,
                    481:     WPARAM wParam,
                    482:     LPARAM lParam)
                    483: {
                    484:     NPCTYPE npc;
                    485: 
                    486:     switch (msg) {
                    487:         case WM_INITDIALOG:
                    488:             CheckStyleBoxes(hwnd, npcStyles->pwcd->iClass,
                    489:                     npcStyles->flStyle);
                    490:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                    491: 
                    492:             /*
                    493:              * Only test for possibly disabling the "default"
                    494:              * checkbox if the current control does not have the
                    495:              * "default" style.  If it does, we must always allow
                    496:              * them to turn it off.
                    497:              */
                    498:             if ((npcStyles->flStyle & BS_ALL) != BS_DEFPUSHBUTTON) {
                    499:                 /*
                    500:                  * Loop through all the controls.  If any pushbutton
                    501:                  * is found with the "default" style, we disable the
                    502:                  * "Default" checkbox in the styles dialog.
                    503:                  */
                    504:                 for (npc = npcHead; npc; npc = npc->npcNext)
                    505:                     if ((npc->pwcd->iType == W_PUSHBUTTON) &&
                    506:                             (npc->flStyle & BS_ALL) == BS_DEFPUSHBUTTON) {
                    507:                         EnableWindow(GetDlgItem(hwnd, DID_BS_DEFPUSHBUTTON),
                    508:                                 FALSE);
                    509:                         break;
                    510:                     }
                    511:             }
                    512: 
                    513:             CenterWindow(hwnd);
                    514: 
                    515:             return TRUE;
                    516: 
                    517:         case WM_COMMAND:
                    518:             switch (LOWORD(wParam)) {
                    519:                 case IDOK:
                    520:                     QueryCheckedStyles(hwnd, npcStyles->pwcd->iClass,
                    521:                             &flStyleNew);
                    522:                     QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                    523: 
                    524:                     EndDialog(hwnd, IDOK);
                    525:                     return TRUE;
                    526: 
                    527:                 case IDCANCEL:
                    528:                     EndDialog(hwnd, IDCANCEL);
                    529:                     return TRUE;
                    530: 
                    531:                 case IDHELP:
                    532:                     StylesHelp();
                    533:                     break;
                    534:             }
                    535: 
                    536:             return FALSE;
                    537: 
                    538:         default:
                    539:             return FALSE;
                    540:     }
                    541: }
                    542: 
                    543: 
                    544: 
                    545: /************************************************************************
                    546: * ComboBoxStylesDlgProc
                    547: *
                    548: * Dialog procedure for combo boxes.
                    549: *
                    550: ************************************************************************/
                    551: 
                    552: DIALOGPROC ComboBoxStylesDlgProc(
                    553:     HWND hwnd,
                    554:     UINT msg,
                    555:     WPARAM wParam,
                    556:     LPARAM lParam)
                    557: {
                    558:     switch (msg) {
                    559:         case WM_INITDIALOG:
                    560:             CheckStyleBoxes(hwnd, npcStyles->pwcd->iClass,
                    561:                     npcStyles->flStyle);
                    562:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                    563: 
                    564:             EnableComboBoxStyles(hwnd, 0);
                    565: 
                    566:             CenterWindow(hwnd);
                    567: 
                    568:             return TRUE;
                    569: 
                    570:         case WM_COMMAND:
                    571:             switch (LOWORD(wParam)) {
                    572:                 case DID_CBS_OWNERDRAWFIXED:
                    573:                 case DID_CBS_OWNERDRAWVARIABLE:
                    574:                     if (HIWORD(wParam) == BN_CLICKED)
                    575:                         EnableComboBoxStyles(hwnd,
                    576:                                 LOWORD(wParam));
                    577: 
                    578:                     return TRUE;
                    579: 
                    580:                 case IDOK:
                    581:                     QueryCheckedStyles(hwnd, npcStyles->pwcd->iClass,
                    582:                             &flStyleNew);
                    583:                     QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                    584:                     EndDialog(hwnd, IDOK);
                    585:                     return TRUE;
                    586: 
                    587:                 case IDCANCEL:
                    588:                     EndDialog(hwnd, IDCANCEL);
                    589:                     return TRUE;
                    590: 
                    591:                 case IDHELP:
                    592:                     StylesHelp();
                    593:                     break;
                    594:             }
                    595: 
                    596:             return FALSE;
                    597: 
                    598:         default:
                    599:             return FALSE;
                    600:     }
                    601: }
                    602: 
                    603: 
                    604: 
                    605: /************************************************************************
                    606: * EnableComboBoxStyles
                    607: *
                    608: * Checks/unchecks, disables/enables various checkboxes that are
                    609: * mutually exclusive and/or dependant for the Combo Box Styles dialog.
                    610: *
                    611: * Arguments:
                    612: *   HWND hwnd   - Dialog window handle.
                    613: *   INT idCtrl  - ID of the control that was clicked on.
                    614: *
                    615: ************************************************************************/
                    616: 
                    617: STATICFN VOID EnableComboBoxStyles(
                    618:     HWND hwnd,
                    619:     INT idCtrl)
                    620: {
                    621:     BOOL fFixedChecked;
                    622:     BOOL fVariableChecked;
                    623: 
                    624:     fFixedChecked = IsDlgButtonChecked(hwnd, DID_CBS_OWNERDRAWFIXED);
                    625:     fVariableChecked = IsDlgButtonChecked(hwnd, DID_CBS_OWNERDRAWVARIABLE);
                    626: 
                    627:     if (fFixedChecked || fVariableChecked) {
                    628:         EnableWindow(GetDlgItem(hwnd, DID_CBS_HASSTRINGS), TRUE);
                    629:     }
                    630:     else {
                    631:         EnableWindow(GetDlgItem(hwnd, DID_CBS_HASSTRINGS), FALSE);
                    632:         CheckDlgButton(hwnd, DID_CBS_HASSTRINGS, 0);
                    633:     }
                    634: 
                    635:     switch (idCtrl) {
                    636:         case DID_CBS_OWNERDRAWFIXED:
                    637:             if (fFixedChecked)
                    638:                 CheckDlgButton(hwnd, DID_CBS_OWNERDRAWVARIABLE, 0);
                    639: 
                    640:             break;
                    641: 
                    642:         case DID_CBS_OWNERDRAWVARIABLE:
                    643:             if (fVariableChecked)
                    644:                 CheckDlgButton(hwnd, DID_CBS_OWNERDRAWFIXED, 0);
                    645: 
                    646:             break;
                    647:     }
                    648: }
                    649: 
                    650: 
                    651: 
                    652: /************************************************************************
                    653: * EditStylesDlgProc
                    654: *
                    655: * Dialog procedure for edit boxes.
                    656: *
                    657: ************************************************************************/
                    658: 
                    659: DIALOGPROC EditStylesDlgProc(
                    660:     HWND hwnd,
                    661:     UINT msg,
                    662:     WPARAM wParam,
                    663:     LPARAM lParam)
                    664: {
                    665:     switch (msg) {
                    666:         case WM_INITDIALOG:
                    667:             CheckStyleBoxes(hwnd, npcStyles->pwcd->iClass,
                    668:                     npcStyles->flStyle);
                    669:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                    670: 
                    671:             EnableEditStyles(hwnd, 0);
                    672: 
                    673:             CenterWindow(hwnd);
                    674: 
                    675:             return TRUE;
                    676: 
                    677:         case WM_COMMAND:
                    678:             switch (LOWORD(wParam)) {
                    679:                 case DID_ES_UPPERCASE:
                    680:                 case DID_ES_LOWERCASE:
                    681:                 case DID_ES_MULTILINE:
                    682:                     if (HIWORD(wParam) == BN_CLICKED)
                    683:                         EnableEditStyles(hwnd,
                    684:                                 LOWORD(wParam));
                    685: 
                    686:                     return TRUE;
                    687: 
                    688:                 case IDOK:
                    689:                     QueryCheckedStyles(hwnd, npcStyles->pwcd->iClass,
                    690:                             &flStyleNew);
                    691:                     QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                    692:                     EndDialog(hwnd, IDOK);
                    693:                     return TRUE;
                    694: 
                    695:                 case IDCANCEL:
                    696:                     EndDialog(hwnd, IDCANCEL);
                    697:                     return TRUE;
                    698: 
                    699:                 case IDHELP:
                    700:                     StylesHelp();
                    701:                     break;
                    702:             }
                    703: 
                    704:             return FALSE;
                    705: 
                    706:         default:
                    707:             return FALSE;
                    708:     }
                    709: }
                    710: 
                    711: 
                    712: 
                    713: /************************************************************************
                    714: * EnableEditStyles
                    715: *
                    716: * Checks/unchecks, disables/enables various checkboxes that are
                    717: * mutually exclusive and/or dependant for the Edit Field Styles dialog.
                    718: *
                    719: * Arguments:
                    720: *   HWND hwnd  - Dialog window handle.
                    721: *   INT idCtrl - ID of the control that was clicked on.
                    722: *
                    723: ************************************************************************/
                    724: 
                    725: STATICFN VOID EnableEditStyles(
                    726:     HWND hwnd,
                    727:     INT idCtrl)
                    728: {
                    729:     if (IsDlgButtonChecked(hwnd, DID_ES_MULTILINE)) {
                    730:         EnableWindow(GetDlgItem(hwnd, DID_ES_CENTER), TRUE);
                    731:         EnableWindow(GetDlgItem(hwnd, DID_ES_RIGHT), TRUE);
                    732:         EnableWindow(GetDlgItem(hwnd, DID_WS_VSCROLL), TRUE);
                    733:         EnableWindow(GetDlgItem(hwnd, DID_ES_AUTOVSCROLL), TRUE);
                    734:         EnableWindow(GetDlgItem(hwnd, DID_WS_HSCROLL), TRUE);
                    735:     }
                    736:     else {
                    737:         EnableWindow(GetDlgItem(hwnd, DID_ES_CENTER), FALSE);
                    738:         EnableWindow(GetDlgItem(hwnd, DID_ES_RIGHT), FALSE);
                    739:         EnableWindow(GetDlgItem(hwnd, DID_WS_VSCROLL), FALSE);
                    740:         EnableWindow(GetDlgItem(hwnd, DID_ES_AUTOVSCROLL), FALSE);
                    741:         EnableWindow(GetDlgItem(hwnd, DID_WS_HSCROLL), FALSE);
                    742: 
                    743:         CheckDlgButton(hwnd, DID_ES_LEFT, 1);
                    744:         CheckDlgButton(hwnd, DID_ES_CENTER, 0);
                    745:         CheckDlgButton(hwnd, DID_ES_RIGHT, 0);
                    746:         CheckDlgButton(hwnd, DID_WS_VSCROLL, 0);
                    747:         CheckDlgButton(hwnd, DID_ES_AUTOVSCROLL, 0);
                    748:         CheckDlgButton(hwnd, DID_WS_HSCROLL, 0);
                    749:     }
                    750: 
                    751:     if (idCtrl == DID_ES_UPPERCASE) {
                    752:         if (IsDlgButtonChecked(hwnd, DID_ES_UPPERCASE))
                    753:             CheckDlgButton(hwnd, DID_ES_LOWERCASE, 0);
                    754:     }
                    755:     else if (idCtrl == DID_ES_LOWERCASE) {
                    756:         if (IsDlgButtonChecked(hwnd, DID_ES_LOWERCASE))
                    757:             CheckDlgButton(hwnd, DID_ES_UPPERCASE, 0);
                    758:     }
                    759: }
                    760: 
                    761: 
                    762: 
                    763: /************************************************************************
                    764: * ListBoxStylesDlgProc
                    765: *
                    766: * Dialog procedure for list boxes.
                    767: *
                    768: ************************************************************************/
                    769: 
                    770: DIALOGPROC ListBoxStylesDlgProc(
                    771:     HWND hwnd,
                    772:     UINT msg,
                    773:     WPARAM wParam,
                    774:     LPARAM lParam)
                    775: {
                    776:     switch (msg) {
                    777:         case WM_INITDIALOG:
                    778:             CheckStyleBoxes(hwnd, npcStyles->pwcd->iClass,
                    779:                     npcStyles->flStyle);
                    780:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                    781: 
                    782:             EnableListBoxStyles(hwnd, 0);
                    783: 
                    784:             CenterWindow(hwnd);
                    785: 
                    786:             return TRUE;
                    787: 
                    788:         case WM_COMMAND:
                    789:             switch (LOWORD(wParam)) {
                    790:                 case DID_LBS_STANDARD:
                    791:                 case DID_LBS_NOTIFY:
                    792:                 case DID_LBS_SORT:
                    793:                 case DID_WS_VSCROLL:
                    794:                 case DID_WS_BORDER:
                    795:                 case DID_LBS_MULTIPLESEL:
                    796:                 case DID_LBS_EXTENDEDSEL:
                    797:                 case DID_LBS_OWNERDRAWFIXED:
                    798:                 case DID_LBS_OWNERDRAWVARIABLE:
                    799:                 case DID_LBS_NODATA:
                    800:                 case DID_LBS_HASSTRINGS:
                    801:                     if (HIWORD(wParam) == BN_CLICKED)
                    802:                         EnableListBoxStyles(hwnd,
                    803:                                 LOWORD(wParam));
                    804: 
                    805:                     return TRUE;
                    806: 
                    807:                 case IDOK:
                    808:                     QueryCheckedStyles(hwnd, npcStyles->pwcd->iClass,
                    809:                             &flStyleNew);
                    810:                     QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                    811:                     EndDialog(hwnd, IDOK);
                    812:                     return TRUE;
                    813: 
                    814:                 case IDCANCEL:
                    815:                     EndDialog(hwnd, IDCANCEL);
                    816:                     return TRUE;
                    817: 
                    818:                 case IDHELP:
                    819:                     StylesHelp();
                    820:                     break;
                    821:             }
                    822: 
                    823:             return FALSE;
                    824: 
                    825:         default:
                    826:             return FALSE;
                    827:     }
                    828: }
                    829: 
                    830: 
                    831: 
                    832: /************************************************************************
                    833: * EnableListBoxStyles
                    834: *
                    835: * Checks/unchecks, disables/enables various checkboxes that are
                    836: * mutually exclusive and/or dependant for the List Box Styles dialog.
                    837: *
                    838: * Arguments:
                    839: *   HWND hwnd  - Dialog window handle.
                    840: *   INT idCtrl - ID of the control that was clicked on.
                    841: *
                    842: ************************************************************************/
                    843: 
                    844: STATICFN VOID EnableListBoxStyles(
                    845:     HWND hwnd,
                    846:     INT idCtrl)
                    847: {
                    848:     WORD fCheckState;
                    849:     BOOL fFixedChecked;
                    850:     BOOL fVariableChecked;
                    851: 
                    852:     fFixedChecked = IsDlgButtonChecked(hwnd, DID_LBS_OWNERDRAWFIXED);
                    853:     fVariableChecked = IsDlgButtonChecked(hwnd, DID_LBS_OWNERDRAWVARIABLE);
                    854: 
                    855:     if (fFixedChecked || fVariableChecked) {
                    856:         EnableWindow(GetDlgItem(hwnd, DID_LBS_HASSTRINGS), TRUE);
                    857:     }
                    858:     else {
                    859:         EnableWindow(GetDlgItem(hwnd, DID_LBS_HASSTRINGS), FALSE);
                    860:         CheckDlgButton(hwnd, DID_LBS_HASSTRINGS, 0);
                    861:     }
                    862: 
                    863:     EnableWindow(GetDlgItem(hwnd, DID_LBS_NODATA), fFixedChecked);
                    864: 
                    865:     switch (idCtrl) {
                    866:         case DID_LBS_STANDARD:
                    867:             fCheckState = (WORD)(IsDlgButtonChecked(hwnd, DID_LBS_STANDARD)
                    868:                     ? 1 : 0);
                    869:             CheckDlgButton(hwnd, DID_LBS_NOTIFY, fCheckState);
                    870:             CheckDlgButton(hwnd, DID_LBS_SORT, fCheckState);
                    871:             CheckDlgButton(hwnd, DID_WS_VSCROLL, fCheckState);
                    872:             CheckDlgButton(hwnd, DID_WS_BORDER, fCheckState);
                    873: 
                    874:             if (fCheckState)
                    875:                 CheckDlgButton(hwnd, DID_LBS_NODATA, 0);
                    876: 
                    877:             break;
                    878: 
                    879:         case DID_LBS_OWNERDRAWFIXED:
                    880:             if (fFixedChecked)
                    881:                 CheckDlgButton(hwnd, DID_LBS_OWNERDRAWVARIABLE, 0);
                    882:             else
                    883:                 CheckDlgButton(hwnd, DID_LBS_NODATA, 0);
                    884: 
                    885:             break;
                    886: 
                    887:         case DID_LBS_OWNERDRAWVARIABLE:
                    888:             if (fVariableChecked) {
                    889:                 CheckDlgButton(hwnd, DID_LBS_OWNERDRAWFIXED, 0);
                    890:                 CheckDlgButton(hwnd, DID_LBS_NODATA, 0);
                    891:                 EnableWindow(GetDlgItem(hwnd, DID_LBS_NODATA), FALSE);
                    892:             }
                    893: 
                    894:             break;
                    895: 
                    896:         case DID_LBS_MULTIPLESEL:
                    897:             if (IsDlgButtonChecked(hwnd, DID_LBS_MULTIPLESEL))
                    898:                 CheckDlgButton(hwnd, DID_LBS_EXTENDEDSEL, 0);
                    899: 
                    900:             break;
                    901: 
                    902:         case DID_LBS_EXTENDEDSEL:
                    903:             if (IsDlgButtonChecked(hwnd, DID_LBS_EXTENDEDSEL))
                    904:                 CheckDlgButton(hwnd, DID_LBS_MULTIPLESEL, 0);
                    905: 
                    906:             break;
                    907: 
                    908:         case DID_LBS_NODATA:
                    909:             if (IsDlgButtonChecked(hwnd, DID_LBS_NODATA)) {
                    910:                 CheckDlgButton(hwnd, DID_LBS_SORT, 0);
                    911:                 CheckDlgButton(hwnd, DID_LBS_HASSTRINGS, 0);
                    912:                 CheckDlgButton(hwnd, DID_LBS_STANDARD, 0);
                    913:             }
                    914: 
                    915:             break;
                    916: 
                    917:         case DID_LBS_HASSTRINGS:
                    918:             if (IsDlgButtonChecked(hwnd, DID_LBS_HASSTRINGS))
                    919:                 CheckDlgButton(hwnd, DID_LBS_NODATA, 0);
                    920: 
                    921:             break;
                    922: 
                    923:         default:
                    924:             if (!IsDlgButtonChecked(hwnd, DID_LBS_NOTIFY) ||
                    925:                     !IsDlgButtonChecked(hwnd, DID_LBS_SORT) ||
                    926:                     !IsDlgButtonChecked(hwnd, DID_WS_VSCROLL) ||
                    927:                     !IsDlgButtonChecked(hwnd, DID_WS_BORDER))
                    928:                 fCheckState = 0;
                    929:             else
                    930:                 fCheckState = 1;
                    931: 
                    932:             CheckDlgButton(hwnd, DID_LBS_STANDARD, fCheckState);
                    933: 
                    934:             if (IsDlgButtonChecked(hwnd, DID_LBS_SORT) ||
                    935:                     IsDlgButtonChecked(hwnd, DID_LBS_HASSTRINGS))
                    936:                 CheckDlgButton(hwnd, DID_LBS_NODATA, 0);
                    937: 
                    938:             break;
                    939:     }
                    940: }
                    941: 
                    942: 
                    943: 
                    944: /************************************************************************
                    945: * CustomStylesDlgProc
                    946: *
                    947: * Dialog procedure for custom controls.
                    948: *
                    949: ************************************************************************/
                    950: 
                    951: DIALOGPROC CustomStylesDlgProc(
                    952:     HWND hwnd,
                    953:     UINT msg,
                    954:     WPARAM wParam,
                    955:     LPARAM lParam)
                    956: {
                    957:     switch (msg) {
                    958:         case WM_INITDIALOG:
                    959:             SetDlgItemText(hwnd, DID_CUSTOMSTYLESCLASS,
                    960:                     npcStyles->pwcd->pszClass);
                    961:             SendDlgItemMessage(hwnd, DID_CUSTOMSTYLESSTYLES, EM_LIMITTEXT,
                    962:                     CCHHEXLONGMAX, 0L);
                    963:             SetCustomStylesField(hwnd, npcStyles->flStyle);
                    964:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                    965: 
                    966:             CenterWindow(hwnd);
                    967: 
                    968:             return TRUE;
                    969: 
                    970:         case WM_COMMAND:
                    971:             switch (LOWORD(wParam)) {
                    972:                 case DID_CUSTOMSTYLESSTYLES:
                    973:                     if (HIWORD(wParam) == EN_CHANGE) {
                    974:                         flStyleNew = GetCustomStylesField(hwnd);
                    975:                         CheckStyleBoxes(hwnd, IC_WINDOW, flStyleNew);
                    976:                     }
                    977: 
                    978:                     break;
                    979: 
                    980:                 case DID_WS_VISIBLE:
                    981:                 case DID_WS_DISABLED:
                    982:                 case DID_WS_GROUP:
                    983:                 case DID_WS_TABSTOP:
                    984:                     if (HIWORD(wParam) == BN_CLICKED) {
                    985:                         flStyleNew = GetCustomStylesField(hwnd);
                    986:                         QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                    987:                         SetCustomStylesField(hwnd, flStyleNew);
                    988:                     }
                    989: 
                    990:                     break;
                    991: 
                    992:                 case IDOK:
                    993:                     flStyleNew = GetCustomStylesField(hwnd);
                    994: 
                    995:                     EndDialog(hwnd, IDOK);
                    996: 
                    997:                     return TRUE;
                    998: 
                    999:                 case IDCANCEL:
                   1000:                     EndDialog(hwnd, IDCANCEL);
                   1001:                     return TRUE;
                   1002: 
                   1003:                 case IDHELP:
                   1004:                     StylesHelp();
                   1005:                     break;
                   1006:             }
                   1007: 
                   1008:             return FALSE;
                   1009: 
                   1010:         default:
                   1011:             return FALSE;
                   1012:     }
                   1013: }
                   1014: 
                   1015: 
                   1016: 
                   1017: /************************************************************************
                   1018: * SetCustomStylesField
                   1019: *
                   1020: * Sets the style bits in a custom control.
                   1021: *
                   1022: * Arguments:
                   1023: *   HWND hwnd - handle to the custom control
                   1024: *   DWORD flStyle - style of the custom control
                   1025: *
                   1026: ************************************************************************/
                   1027: 
                   1028: STATICFN VOID SetCustomStylesField(
                   1029:     HWND hwnd,
                   1030:     DWORD flStyle)
                   1031: {
                   1032:     TCHAR szBuf[32];
                   1033: 
                   1034:     wsprintf(szBuf, L"%#.8lx", flStyle);
                   1035:     SetDlgItemText(hwnd, DID_CUSTOMSTYLESSTYLES, szBuf);
                   1036: }
                   1037: 
                   1038: 
                   1039: 
                   1040: /************************************************************************
                   1041: * GetCustomStylesField
                   1042: *
                   1043: * Gets the style bits of a custom control.
                   1044: * 
                   1045: * Arguments:
                   1046: *   HWND hwnd - handle to the custom control.
                   1047: *
                   1048: * Returns:
                   1049: * 
                   1050: * The style bits specified for the custom control.
                   1051: *
                   1052: ************************************************************************/
                   1053: 
                   1054: STATICFN DWORD GetCustomStylesField(
                   1055:     HWND hwnd)
                   1056: {
                   1057:     TCHAR szBuf[CCHTEXTMAX];
                   1058: 
                   1059:     GetDlgItemText(hwnd, DID_CUSTOMSTYLESSTYLES, szBuf, CCHTEXTMAX);
                   1060: 
                   1061:     return valtoi(szBuf);
                   1062: }
                   1063: 
                   1064: 
                   1065: 
                   1066: /************************************************************************
                   1067: * DialogStylesDlgProc
                   1068: *
                   1069: * Dialog procedure for a dialog box.
                   1070: *
                   1071: ************************************************************************/
                   1072: 
                   1073: DIALOGPROC DialogStylesDlgProc(
                   1074:     HWND hwnd,
                   1075:     UINT msg,
                   1076:     WPARAM wParam,
                   1077:     LPARAM lParam)
                   1078: {
                   1079:     DWORD flResFlagsNew;
                   1080:     INT nPointSize;
                   1081:     INT iLang;
                   1082:     INT iSubLang;
                   1083:     TCHAR szFontName[LF_FACESIZE];
                   1084:     INT nIndex;
                   1085: 
                   1086:     switch (msg) {
                   1087:         case WM_INITDIALOG:
                   1088:             CheckStyleBoxes(hwnd, IC_RESFLAGS, (DWORD)diNew.fResFlags);
                   1089:             CheckStyleBoxes(hwnd, IC_DIALOG, npcStyles->flStyle);
                   1090:             CheckStyleBoxes(hwnd, IC_WINDOW, npcStyles->flStyle);
                   1091: 
                   1092:             if (IsDlgButtonChecked(hwnd, DID_WS_CAPTION)) {
                   1093:                 CheckDlgButton(hwnd, DID_WS_BORDER, 1);
                   1094:                 CheckDlgButton(hwnd, DID_WS_DLGFRAME, 1);
                   1095:             }
                   1096: 
                   1097:             FillFontNameCombo(hwnd);
                   1098:             FillLanguageCombo(hwnd);
                   1099: 
                   1100:             if (IsOrd(diNew.pszClass))
                   1101:                 SetDlgItemInt(hwnd, DID_DLGSTYLECLASS,
                   1102:                         OrdID(diNew.pszClass), FALSE);
                   1103:             else
                   1104:                 SetDlgItemText(hwnd, DID_DLGSTYLECLASS, diNew.pszClass);
                   1105: 
                   1106:             if (IsOrd(diNew.pszMenu))
                   1107:                 SetDlgItemInt(hwnd, DID_DLGSTYLEMENU,
                   1108:                         OrdID(diNew.pszMenu), FALSE);
                   1109:             else
                   1110:                 SetDlgItemText(hwnd, DID_DLGSTYLEMENU, diNew.pszMenu);
                   1111: 
                   1112:             EnableDialogStyles(hwnd, 0);
                   1113: 
                   1114:             CenterWindow(hwnd);
                   1115: 
                   1116:             return TRUE;
                   1117: 
                   1118:         case WM_COMMAND:
                   1119:             switch (LOWORD(wParam)) {
                   1120:                 case DID_WS_BORDER:
                   1121:                 case DID_WS_DLGFRAME:
                   1122:                 case DID_WS_CAPTION:
                   1123:                 case DID_WS_POPUP:
                   1124:                 case DID_WS_CHILD:
                   1125:                     if (HIWORD(wParam) == BN_CLICKED)
                   1126:                         EnableDialogStyles(hwnd,
                   1127:                                 LOWORD(wParam));
                   1128: 
                   1129:                     return TRUE;
                   1130: 
                   1131:                 case DID_DLGSTYLEFONTNAME:
                   1132:                     /*
                   1133:                      * Did the font name combo change?
                   1134:                      */
                   1135:                     if (HIWORD(wParam) == CBN_EDITCHANGE ||
                   1136:                             HIWORD(wParam) == CBN_SELCHANGE) {
                   1137:                         /*
                   1138:                          * Get the font name and begin looking for it.
                   1139:                          */
                   1140:                         if (HIWORD(wParam) == CBN_EDITCHANGE) {
                   1141:                             /*
                   1142:                              * The edit field was typed into.  Get the
                   1143:                              * new text from there.
                   1144:                              */
                   1145:                             GetDlgItemText(hwnd, DID_DLGSTYLEFONTNAME,
                   1146:                                     szFontName, LF_FACESIZE);
                   1147:                         }
                   1148:                         else {
                   1149:                             /*
                   1150:                              * A new string was selected from the list
                   1151:                              * box.  Get it from the list box, because
                   1152:                              * at this point the new text is not yet set
                   1153:                              * into the edit control!
                   1154:                              */
                   1155:                             nIndex = (INT)SendDlgItemMessage(hwnd,
                   1156:                                     DID_DLGSTYLEFONTNAME, CB_GETCURSEL, 0, 0L);
                   1157: 
                   1158:                             if (nIndex != CB_ERR)
                   1159:                                 SendDlgItemMessage(hwnd,
                   1160:                                         DID_DLGSTYLEFONTNAME, CB_GETLBTEXT,
                   1161:                                         nIndex, (DWORD)szFontName);
                   1162:                             else
                   1163:                                 *szFontName = CHAR_NULL;
                   1164:                         }
                   1165: 
                   1166:                         FillPointSizeCombo(hwnd, szFontName);
                   1167:                     }
                   1168: 
                   1169:                     return TRUE;
                   1170: 
                   1171:                 case DID_DLGSTYLELANG:
                   1172:                     /*
                   1173:                      * Did the language combo change?
                   1174:                      */
                   1175:                     if (HIWORD(wParam) == CBN_SELCHANGE) {
                   1176:                         nIndex = (INT)SendDlgItemMessage(hwnd,
                   1177:                                 DID_DLGSTYLELANG, CB_GETCURSEL, 0, 0L);
                   1178:                         iLang = (INT)SendDlgItemMessage(hwnd,
                   1179:                                 DID_DLGSTYLELANG, CB_GETITEMDATA, nIndex, 0);
                   1180:                         FillSubLanguageCombo(hwnd, iLang);
                   1181:                     }
                   1182: 
                   1183:                     return TRUE;
                   1184: 
                   1185:                 case IDOK:
                   1186:                     /*
                   1187:                      * If they have entered a font name and an empty
                   1188:                      * or zero point size, display an error.
                   1189:                      */
                   1190:                     nPointSize = GetDlgItemInt(
                   1191:                             hwnd, DID_DLGSTYLEPOINTSIZE, NULL, FALSE);
                   1192:                     if (!nPointSize &&
                   1193:                             SendDlgItemMessage(hwnd,
                   1194:                             DID_DLGSTYLEFONTNAME, WM_GETTEXTLENGTH, 0, 0L)) {
                   1195:                         Message(MSG_ZEROPOINTSIZE);
                   1196:                         SetFocus(GetDlgItem(hwnd, DID_DLGSTYLEPOINTSIZE));
                   1197:                         return TRUE;
                   1198:                     }
                   1199: 
                   1200:                     GetDlgItemText(hwnd, DID_DLGSTYLEFONTNAME,
                   1201:                             diNew.szFontName, LF_FACESIZE);
                   1202:                     diNew.nPointSize = nPointSize;
                   1203: 
                   1204:                     /*
                   1205:                      * Get the Language.
                   1206:                      */
                   1207:                     nIndex = (INT)SendDlgItemMessage(hwnd,
                   1208:                             DID_DLGSTYLELANG, CB_GETCURSEL, 0, 0L);
                   1209:                     iLang = (INT)SendDlgItemMessage(hwnd,
                   1210:                             DID_DLGSTYLELANG, CB_GETITEMDATA,
                   1211:                             nIndex, 0);
                   1212:                     nIndex = (INT)SendDlgItemMessage(hwnd,
                   1213:                             DID_DLGSTYLESUBLANG, CB_GETCURSEL, 0, 0L);
                   1214:                     iSubLang = (INT)SendDlgItemMessage(hwnd,
                   1215:                             DID_DLGSTYLESUBLANG, CB_GETITEMDATA,
                   1216:                             nIndex, 0);
                   1217:                     diNew.wLanguage = MAKELANGID(gaLangTable[iLang].wPrimary,
                   1218:                             gaLangTable[iLang].asl[iSubLang].wSubLang);
                   1219: 
                   1220:                     /*
                   1221:                      * Get the resource flags.  We need to use a temporary
                   1222:                      * long variable because QueryCheckedStyles requires
                   1223:                      * a long.
                   1224:                      */
                   1225:                     flResFlagsNew = diNew.fResFlags;
                   1226:                     QueryCheckedStyles(hwnd, IC_RESFLAGS, &flResFlagsNew);
                   1227:                     diNew.fResFlags = (WORD)flResFlagsNew;
                   1228: 
                   1229:                     QueryCheckedStyles(hwnd, IC_DIALOG, &flStyleNew);
                   1230:                     QueryCheckedStyles(hwnd, IC_WINDOW, &flStyleNew);
                   1231: 
                   1232:                     /*
                   1233:                      * Set the DS_SETFONT style, if they specified
                   1234:                      * a font.
                   1235:                      */
                   1236:                     if (*diNew.szFontName)
                   1237:                         flStyleNew |= DS_SETFONT;
                   1238:                     else
                   1239:                         flStyleNew &= ~DS_SETFONT;
                   1240: 
                   1241:                     GetDlgItemText(hwnd, DID_DLGSTYLECLASS,
                   1242:                             diNew.pszClass, CCHTEXTMAX);
                   1243: 
                   1244:                     /*
                   1245:                      * Convert the class to an ordinal, if necessary.
                   1246:                      */
                   1247:                     StrToNameOrd(diNew.pszClass, FALSE);
                   1248: 
                   1249:                     GetDlgItemText(hwnd, DID_DLGSTYLEMENU,
                   1250:                             diNew.pszMenu, CCHTEXTMAX);
                   1251: 
                   1252:                     /*
                   1253:                      * Convert the menu name to an ordinal, if necessary.
                   1254:                      */
                   1255:                     StrToNameOrd(diNew.pszMenu, FALSE);
                   1256: 
                   1257:                     /*
                   1258:                      * If they just removed the caption style,
                   1259:                      * clear the dialog's caption text at the
                   1260:                      * same time.
                   1261:                      */
                   1262:                     if ((npcStyles->flStyle & WS_CAPTION) == WS_CAPTION &&
                   1263:                             (flStyleNew & WS_CAPTION) != WS_CAPTION)
                   1264:                         *pszTextNew = CHAR_NULL;
                   1265: 
                   1266:                     EndDialog(hwnd, IDOK);
                   1267:                     return TRUE;
                   1268: 
                   1269:                 case IDCANCEL:
                   1270:                     EndDialog(hwnd, IDCANCEL);
                   1271:                     return TRUE;
                   1272: 
                   1273:                 case IDHELP:
                   1274:                     StylesHelp();
                   1275:                     break;
                   1276:             }
                   1277: 
                   1278:             return FALSE;
                   1279: 
                   1280:         default:
                   1281:             return FALSE;
                   1282:     }
                   1283: }
                   1284: 
                   1285: 
                   1286: 
                   1287: /************************************************************************
                   1288: * EnableDialogStyles
                   1289: *
                   1290: * Checks and unchecks various checkboxes that are mutually exclusive
                   1291: * for the Dialog Styles dialog.
                   1292: *
                   1293: * Arguments:
                   1294: *   HWND hwnd  - Dialog window handle.
                   1295: *   INT idCtrl - ID of the control that was clicked on.
                   1296: *
                   1297: ************************************************************************/
                   1298: 
                   1299: STATICFN VOID EnableDialogStyles(
                   1300:     HWND hwnd,
                   1301:     INT idCtrl)
                   1302: {
                   1303:     switch (idCtrl) {
                   1304:         case DID_WS_CAPTION:
                   1305:             if (IsDlgButtonChecked(hwnd, DID_WS_CAPTION)) {
                   1306:                 CheckDlgButton(hwnd, DID_WS_BORDER, 1);
                   1307:                 CheckDlgButton(hwnd, DID_WS_DLGFRAME, 1);
                   1308:             }
                   1309:             else {
                   1310:                 CheckDlgButton(hwnd, DID_WS_BORDER, 0);
                   1311:                 CheckDlgButton(hwnd, DID_WS_DLGFRAME, 0);
                   1312:             }
                   1313: 
                   1314:             break;
                   1315: 
                   1316:         case DID_WS_BORDER:
                   1317:         case DID_WS_DLGFRAME:
                   1318:             if (IsDlgButtonChecked(hwnd, DID_WS_BORDER) &&
                   1319:                     IsDlgButtonChecked(hwnd, DID_WS_DLGFRAME))
                   1320:                 CheckDlgButton(hwnd, DID_WS_CAPTION, 1);
                   1321:             else
                   1322:                 CheckDlgButton(hwnd, DID_WS_CAPTION, 0);
                   1323: 
                   1324:             break;
                   1325: 
                   1326:         case DID_WS_CHILD:
                   1327:             if (IsDlgButtonChecked(hwnd, DID_WS_CHILD))
                   1328:                 CheckDlgButton(hwnd, DID_WS_POPUP, 0);
                   1329: 
                   1330:             break;
                   1331: 
                   1332:         case DID_WS_POPUP:
                   1333:             if (IsDlgButtonChecked(hwnd, DID_WS_POPUP))
                   1334:                 CheckDlgButton(hwnd, DID_WS_CHILD, 0);
                   1335: 
                   1336:             break;
                   1337:     }
                   1338: }
                   1339: 
                   1340: 
                   1341: 
                   1342: /************************************************************************
                   1343: * FillFontNameCombo
                   1344: *
                   1345: * Fills combo box with available fonts for dialog.
                   1346: *
                   1347: * Arguments:
                   1348: *   HWND hwndDlg - Dialog window handle.
                   1349: *
                   1350: ************************************************************************/
                   1351: 
                   1352: STATICFN VOID FillFontNameCombo(
                   1353:     HWND hwndDlg)
                   1354: {
                   1355:     HDC hDC;
                   1356:     HWND hwndCombo;
                   1357:     TCHAR szName1[LF_FACESIZE];
                   1358:     TCHAR szName2[LF_FACESIZE];
                   1359:     LPTSTR pszName;
                   1360:     LPTSTR pszNameLast;
                   1361:     LPTSTR pszNameTemp;
                   1362:     INT iIndex;
                   1363:     INT iItems;
                   1364: 
                   1365:     hwndCombo = GetDlgItem(hwndDlg, DID_DLGSTYLEFONTNAME);
                   1366: 
                   1367:     if (hDC = GetDC(ghwndMain)) {
                   1368:         EnumFonts(hDC, NULL, (FONTENUMPROC) FontNameEnumFunc, (LPARAM)&hwndCombo);
                   1369:         ReleaseDC(ghwndMain, hDC);
                   1370:     }
                   1371: 
                   1372:     /*
                   1373:      * Strip out any duplicate names in the combobox.  This routine
                   1374:      * relies on the items being sorted first.
                   1375:      */
                   1376:     iItems = (INT)SendMessage(hwndCombo, CB_GETCOUNT, 0, 0);
                   1377:     *szName1 = CHAR_NULL;
                   1378:     *szName2 = CHAR_NULL;
                   1379:     pszName = szName1;
                   1380:     pszNameLast = szName2;
                   1381:     for (iIndex = 0; iIndex < iItems;) {
                   1382:         /*
                   1383:          * Get the text of the next item.
                   1384:          */
                   1385:         SendMessage(hwndCombo, CB_GETLBTEXT, iIndex, (DWORD)pszName);
                   1386: 
                   1387:         /*
                   1388:          * If it matches the previous item, delete it.  Otherwise,
                   1389:          * flip the buffers to save the current items text and
                   1390:          * go on to the next item.
                   1391:          */
                   1392:         if (lstrcmp(pszName, pszNameLast) == 0) {
                   1393:             SendMessage(hwndCombo, CB_DELETESTRING, iIndex, 0);
                   1394:             iItems--;
                   1395:         }
                   1396:         else {
                   1397:             pszNameTemp = pszNameLast;
                   1398:             pszNameLast = pszName;
                   1399:             pszName = pszNameTemp;
                   1400:             iIndex++;
                   1401:         }
                   1402:     }
                   1403: 
                   1404:     /*
                   1405:      * Initialize the font fields.  The order the fields are set
                   1406:      * is important, because setting the face name clears out the
                   1407:      * point size combo.
                   1408:      */
                   1409:     SetDlgItemText(hwndDlg, DID_DLGSTYLEFONTNAME, diNew.szFontName);
                   1410:     FillPointSizeCombo(hwndDlg, diNew.szFontName);
                   1411: }
                   1412: 
                   1413: 
                   1414: 
                   1415: /************************************************************************
                   1416: * FontNameEnumFunc
                   1417: *
                   1418: * Enumeration function that adds all the font face names to the
                   1419: * Font Face Name combo box in the Dialog Styles dialog.
                   1420: *
                   1421: * Arguments:
                   1422: *   LPLOGFONT lpLogFont - pointer to font structure
                   1423: *   LPTEXTMETRIC lpTextMetric - pointer to textmetric struct for font
                   1424: *   INT nFontType - type of font
                   1425: *   LPVOID lpData - font data
                   1426: *
                   1427: ************************************************************************/
                   1428: 
                   1429: BOOL APIENTRY FontNameEnumFunc(
                   1430:     LPLOGFONT lpLogFont,
                   1431:     LPTEXTMETRIC lpTextMetric,
                   1432:     INT nFontType,
                   1433:     LPVOID lpData)
                   1434: {
                   1435:     /*
                   1436:      * Add this name to the combo box.
                   1437:      */
                   1438:     SendMessage(*((LPHWND)lpData), CB_ADDSTRING, 0,
                   1439:             (DWORD)lpLogFont->lfFaceName);
                   1440: 
                   1441:     /*
                   1442:      * Keep on going...
                   1443:      */
                   1444:     return TRUE;
                   1445: }
                   1446: 
                   1447: 
                   1448: 
                   1449: /************************************************************************
                   1450: * FillPointSizeCombo
                   1451: *
                   1452: * This function fills the Point Size combobox with the point sizes
                   1453: * that are available for the given face name.  It should be called
                   1454: * whenever the Font Name combobox is changed to keep them in sync.
                   1455: *
                   1456: * Arguments:
                   1457: *   HWND hwndDlg        - Dialog window handle.
                   1458: *   LPTSTR pszFaceName  - Face name for the selected font.
                   1459: *
                   1460: ************************************************************************/
                   1461: 
                   1462: STATICFN VOID FillPointSizeCombo(
                   1463:     HWND hwndDlg,
                   1464:     LPTSTR pszFaceName)
                   1465: {
                   1466:     HDC hDC;
                   1467:     HWND hwndCombo;
                   1468: 
                   1469:     hwndCombo = GetDlgItem(hwndDlg, DID_DLGSTYLEPOINTSIZE);
                   1470:     SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0L);
                   1471: 
                   1472:     if (*pszFaceName && (hDC = GetDC(ghwndMain))) {
                   1473:         EnumFonts(hDC, pszFaceName, (FONTENUMPROC) PointSizeEnumFunc, (LPARAM)&hwndCombo);
                   1474:         ReleaseDC(ghwndMain, hDC);
                   1475:     }
                   1476: 
                   1477:     /*
                   1478:      * Select a default one.  This is the point size that is currently
                   1479:      * selected if the face name is the current one, or else it is the
                   1480:      * first point size in the list.
                   1481:      */
                   1482:     if (gcd.fFontSpecified && lstrcmp(pszFaceName, gcd.di.szFontName) == 0)
                   1483:         SetDlgItemInt(hwndDlg, DID_DLGSTYLEPOINTSIZE, gcd.di.nPointSize, FALSE);
                   1484:     else
                   1485:         SendDlgItemMessage(hwndDlg, DID_DLGSTYLEPOINTSIZE,
                   1486:                 CB_SETCURSEL, 0, 0L);
                   1487: }
                   1488: 
                   1489: 
                   1490: 
                   1491: /************************************************************************
                   1492: * PointSizeEnumFunc
                   1493: *
                   1494: * Enumeration function that adds all the point sizes to the
                   1495: * Pt. Size combo box in the Dialog Styles dialog.
                   1496: *
                   1497: * Arguments:
                   1498: *   LPLOGFONT lpLogFont - pointer to font structure
                   1499: *   LPTEXTMETRIC lpTextMetric - pointer to textmetric struct for font
                   1500: *   INT nFontType - type of font
                   1501: *   LPVOID lpData - font data
                   1502: *
                   1503: ************************************************************************/
                   1504: 
                   1505: BOOL APIENTRY PointSizeEnumFunc(
                   1506:     LPLOGFONT lpLogFont,
                   1507:     LPTEXTMETRIC lpTextMetric,
                   1508:     INT nFontType,
                   1509:     LPVOID lpData)
                   1510: {
                   1511:     HWND hwndCombo;
                   1512:     INT nPointSize;
                   1513: 
                   1514:     hwndCombo = *((LPHWND)lpData);
                   1515: 
                   1516:     if (nFontType == RASTER_FONTTYPE) {
                   1517:         /*
                   1518:          * Convert the pixels to point size.  Note that because of the
                   1519:          * definition of the tmHeight field, the tmInternalLeading has
                   1520:          * to be subtracted from it before converting to get the proper
                   1521:          * font point size.  This is done automatically by the Windows
                   1522:          * CreateFont call if you pass in a nHeight parameter that is
                   1523:          * negative, so be aware of this when doing the reverse calculation
                   1524:          * to create a font of the proper height!
                   1525:          */
                   1526:         nPointSize = PixelsToPointSize(
                   1527:                 lpTextMetric->tmHeight - lpTextMetric->tmInternalLeading);
                   1528: 
                   1529:         AddToPointSizeCombo(hwndCombo, nPointSize);
                   1530:     }
                   1531:     else {
                   1532:         /*
                   1533:          * For scalable (TrueType, ATM or vector) fonts, add the
                   1534:          * common point sizes.  This list was pulled out of the
                   1535:          ( commdlg.dll Font dialog.
                   1536:          */
                   1537:         AddToPointSizeCombo(hwndCombo, 8);
                   1538:         AddToPointSizeCombo(hwndCombo, 9);
                   1539:         AddToPointSizeCombo(hwndCombo, 10);
                   1540:         AddToPointSizeCombo(hwndCombo, 11);
                   1541:         AddToPointSizeCombo(hwndCombo, 12);
                   1542:         AddToPointSizeCombo(hwndCombo, 14);
                   1543:         AddToPointSizeCombo(hwndCombo, 16);
                   1544:         AddToPointSizeCombo(hwndCombo, 18);
                   1545:         AddToPointSizeCombo(hwndCombo, 20);
                   1546:         AddToPointSizeCombo(hwndCombo, 22);
                   1547:         AddToPointSizeCombo(hwndCombo, 24);
                   1548:         AddToPointSizeCombo(hwndCombo, 26);
                   1549:         AddToPointSizeCombo(hwndCombo, 28);
                   1550:         AddToPointSizeCombo(hwndCombo, 36);
                   1551:         AddToPointSizeCombo(hwndCombo, 48);
                   1552:         AddToPointSizeCombo(hwndCombo, 72);
                   1553:     }
                   1554: 
                   1555:     /*
                   1556:      * Keep on going...
                   1557:      */
                   1558:     return TRUE;
                   1559: }
                   1560: 
                   1561: 
                   1562: 
                   1563: /************************************************************************
                   1564: * AddToPointSizeCombo
                   1565: *
                   1566: * This function adds a point size to the point size combobox.
                   1567: * It does not allow duplicate point sizes, and the sizes will
                   1568: * be inserted in order.
                   1569: *
                   1570: * Arguments:
                   1571: *   HWND hwndCombo - The combobox window handle.
                   1572: *   INT nPointSize - The point size to add.
                   1573: *
                   1574: ************************************************************************/
                   1575: 
                   1576: STATICFN VOID AddToPointSizeCombo(
                   1577:     HWND hwndCombo,
                   1578:     INT nPointSize)
                   1579: {
                   1580:     TCHAR szPointSize[31];
                   1581:     INT nPoints2;
                   1582:     INT iIndex;
                   1583:     INT iIndexAdd;
                   1584:     INT iItems;
                   1585: 
                   1586:     iItems = (INT)SendMessage(hwndCombo, CB_GETCOUNT, 0, 0);
                   1587:     for (iIndex = 0, iIndexAdd = -1; iIndex < iItems; iIndex++) {
                   1588:         nPoints2 = (INT)SendMessage(hwndCombo, CB_GETITEMDATA, iIndex, 0);
                   1589: 
                   1590:         if (nPoints2 == nPointSize) {
                   1591:             /*
                   1592:              * A duplicate was found.  Skip this one.
                   1593:              */
                   1594:             return;
                   1595:         }
                   1596:         else if (nPoints2 > nPointSize) {
                   1597:             iIndexAdd = iIndex;
                   1598:             break;
                   1599:         }
                   1600:     }
                   1601: 
                   1602:     /*
                   1603:      * Add this point size to the combo box.
                   1604:      */
                   1605:     itoaw(nPointSize, szPointSize, 10);
                   1606:     iIndex = (INT)SendMessage(hwndCombo, CB_INSERTSTRING,
                   1607:             iIndexAdd, (DWORD)szPointSize);
                   1608:     SendMessage(hwndCombo, CB_SETITEMDATA, iIndex, (DWORD)nPointSize);
                   1609: }
                   1610: 
                   1611: 
                   1612: 
                   1613: /************************************************************************
                   1614: * FillLanguageCombo
                   1615: *
                   1616: * This function fills the Language combobox with the known languages.
                   1617: *
                   1618: * Arguments:
                   1619: *   HWND hwndDlg - Dialog window handle.
                   1620: *
                   1621: ************************************************************************/
                   1622: 
                   1623: STATICFN VOID FillLanguageCombo(
                   1624:     HWND hwndDlg)
                   1625: {
                   1626:     HWND hwndCombo;
                   1627:     INT i;
                   1628:     INT iIndex;
                   1629:     INT iSel;
                   1630:     INT iLang;
                   1631:     WORD wPrimary;
                   1632: 
                   1633:     hwndCombo = GetDlgItem(hwndDlg, DID_DLGSTYLELANG);
                   1634:     SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0L);
                   1635: 
                   1636:     for (i = 0; i < gcLanguages; i++) {
                   1637:         iIndex = (INT)SendMessage(hwndCombo, CB_ADDSTRING,
                   1638:                 0, (DWORD)ids(gaLangTable[i].idsLangDesc));
                   1639:         SendMessage(hwndCombo, CB_SETITEMDATA, iIndex, (DWORD)i);
                   1640:     }
                   1641: 
                   1642:     wPrimary = (WORD)PRIMARYLANGID(diNew.wLanguage);
                   1643:     for (i = 0, iSel = 0; i < gcLanguages; i++) {
                   1644:         iLang = (INT)SendMessage(hwndCombo, CB_GETITEMDATA, i, 0);
                   1645: 
                   1646:         if (gaLangTable[iLang].wPrimary == wPrimary) {
                   1647:             iSel = i;
                   1648:             break;
                   1649:         }
                   1650:     }
                   1651: 
                   1652:     SendMessage(hwndCombo, CB_SETCURSEL, iSel, 0L);
                   1653: 
                   1654:     FillSubLanguageCombo(hwndDlg,
                   1655:             (INT)SendMessage(hwndCombo, CB_GETITEMDATA, iSel, 0));
                   1656: }
                   1657: 
                   1658: 
                   1659: 
                   1660: /************************************************************************
                   1661: * FillSubLanguageCombo
                   1662: *
                   1663: * This function fills the Sub-Language combobox with the sub-languages
                   1664: * for the specified language.
                   1665: *
                   1666: * Arguments:
                   1667: *   HWND hwndDlg - Dialog window handle.
                   1668: *   INT iLang    - Index to the language in the language table.
                   1669: *
                   1670: ************************************************************************/
                   1671: 
                   1672: STATICFN VOID FillSubLanguageCombo(
                   1673:     HWND hwndDlg,
                   1674:     INT iLang)
                   1675: {
                   1676:     HWND hwndCombo;
                   1677:     INT i;
                   1678:     INT iIndex;
                   1679:     INT iSel = 0;
                   1680:     WORD wSubLang;
                   1681: 
                   1682:     hwndCombo = GetDlgItem(hwndDlg, DID_DLGSTYLESUBLANG);
                   1683:     SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0L);
                   1684: 
                   1685:     for (i = 0; i < gaLangTable[iLang].cSubLangs; i++) {
                   1686:         iIndex = (INT)SendMessage(hwndCombo, CB_ADDSTRING, 0,
                   1687:                 (DWORD)ids(gaLangTable[iLang].asl[i].idsSubLangDesc));
                   1688:         SendMessage(hwndCombo, CB_SETITEMDATA, iIndex, (DWORD)i);
                   1689:     }
                   1690: 
                   1691:     /*
                   1692:      * Is this the language set for the dialog?  If so, find the
                   1693:      * sublanguage and make that the default.
                   1694:      */
                   1695:     if (gaLangTable[iLang].wPrimary == (WORD)PRIMARYLANGID(diNew.wLanguage)) {
                   1696:         wSubLang = SUBLANGID(diNew.wLanguage);
                   1697:         for (i = 0; i < gaLangTable[iLang].cSubLangs; i++) {
                   1698:             iIndex = (INT)SendMessage(hwndCombo, CB_GETITEMDATA, i, 0);
                   1699:             if (wSubLang == gaLangTable[iLang].asl[iIndex].wSubLang) {
                   1700:                 iSel = i;
                   1701:                 break;
                   1702:             }
                   1703:         }
                   1704:     }
                   1705: 
                   1706:     SendMessage(hwndCombo, CB_SETCURSEL, iSel, 0L);
                   1707: }
                   1708: 
                   1709: 
                   1710: 
                   1711: /************************************************************************
                   1712: * CheckStyleBoxes
                   1713: *
                   1714: * This function takes the given style and checks the appropriate
                   1715: * check boxes and radio buttons in the styles dialog.  The iClass
                   1716: * determines the lookup table to use.
                   1717: *
                   1718: * Arguments:
                   1719: *   HWND hwnd     - Dialog window handle.
                   1720: *   INT iClass    - Control class (determines the style lookup table).
                   1721: *   DWORD flStyle - Style of the control.
                   1722: *
                   1723: ************************************************************************/
                   1724: 
                   1725: STATICFN VOID CheckStyleBoxes(
                   1726:     HWND hwnd,
                   1727:     INT iClass,
                   1728:     DWORD flStyle)
                   1729: {
                   1730:     register INT i;
                   1731:     PCLASSSTYLE pcs;
                   1732:     HWND hwndControl;
                   1733:     DWORD flStyleMask;
                   1734: 
                   1735:     i = acsd[iClass].cClassStyles;
                   1736:     pcs = acsd[iClass].pacs;
                   1737: 
                   1738:     while (i--) {
                   1739:         /*
                   1740:          * Is there a DID_* defined for this style?
                   1741:          */
                   1742:         if (pcs->idControl) {
                   1743:             /*
                   1744:              * Does the dialog have a control with this id?
                   1745:              */
                   1746:             if (hwndControl = GetDlgItem(hwnd, pcs->idControl)) {
                   1747:                 flStyleMask =
                   1748:                         pcs->flStyleMask ? pcs->flStyleMask : pcs->flStyle;
                   1749: 
                   1750:                 /*
                   1751:                  * If there is a match, check the box.  Otherwise,
                   1752:                  * uncheck it.
                   1753:                  */
                   1754:                 SendMessage(hwndControl, BM_SETCHECK,
                   1755:                         ((flStyle & flStyleMask) == pcs->flStyle) ? 1 : 0,
                   1756:                         0L);
                   1757:             }
                   1758:         }
                   1759: 
                   1760:         pcs++;
                   1761:     }
                   1762: }
                   1763: 
                   1764: 
                   1765: 
                   1766: /************************************************************************
                   1767: * QueryCheckedStyles
                   1768: *
                   1769: * This function returns the new style that the user has selected from
                   1770: * dialog.  It reads all the checkboxes and builds up the style.
                   1771: * Upon entry, the DWORD that is at pflStyle should be set to the
                   1772: * original style for the control.  Chosen bits will be masked off
                   1773: * and set as appropriate.  This allows bits that are not settable
                   1774: * from within this styles dialog to be left untouched.
                   1775: *
                   1776: * Arguments:
                   1777: *   HWND hwnd       - Dialog window handle.
                   1778: *   INT iClass      - Control class (determines the style lookup table).
                   1779: *   DWORD *pflStyle - Where to return the style of the control.  What
                   1780: *                     this points to should initially have the original
                   1781: *                     styles of the control.
                   1782: *
                   1783: ************************************************************************/
                   1784: 
                   1785: STATICFN VOID QueryCheckedStyles(
                   1786:     HWND hwnd,
                   1787:     INT iClass,
                   1788:     DWORD *pflStyle)
                   1789: {
                   1790:     register INT i;
                   1791:     PCLASSSTYLE pcs;
                   1792:     HWND hwndControl;
                   1793:     DWORD flStyleMask;
                   1794:     DWORD flStyle;
                   1795: 
                   1796:     /*
                   1797:      * The first step is to strip off all bits that may be changed by
                   1798:      * the current dialog.
                   1799:      */
                   1800:     flStyle = *pflStyle;
                   1801:     i = acsd[iClass].cClassStyles;
                   1802:     pcs = acsd[iClass].pacs;
                   1803:     while (i--) {
                   1804:         /*
                   1805:          * Is this a style that is settable by a dialog, and does the
                   1806:          * current dialog have this style control?
                   1807:          */
                   1808:         if (pcs->idControl && GetDlgItem(hwnd, pcs->idControl)) {
                   1809:             flStyleMask =
                   1810:                     pcs->flStyleMask ? pcs->flStyleMask : pcs->flStyle;
                   1811: 
                   1812:             /*
                   1813:              * Strip off all bits in the mask for this style.
                   1814:              */
                   1815:             flStyle &= ~flStyleMask;
                   1816:         }
                   1817: 
                   1818:         pcs++;
                   1819:     }
                   1820: 
                   1821:     /*
                   1822:      * Now we go through all bits that may be set and set any that the
                   1823:      * user has selected.
                   1824:      */
                   1825:     i = acsd[iClass].cClassStyles;
                   1826:     pcs = acsd[iClass].pacs;
                   1827:     while (i--) {
                   1828:         if (pcs->idControl &&
                   1829:                 (hwndControl = GetDlgItem(hwnd, pcs->idControl))) {
                   1830:             if (SendMessage(hwndControl, BM_GETCHECK, 0, 0L))
                   1831:                 flStyle |= pcs->flStyle;
                   1832:         }
                   1833: 
                   1834:         pcs++;
                   1835:     }
                   1836: 
                   1837:     *pflStyle = flStyle;
                   1838: }
                   1839: 
                   1840: 
                   1841: 
                   1842: /************************************************************************
                   1843: * StylesHelp
                   1844: *
                   1845: * This function shows the appropriate help context from any of the
                   1846: * styles dialogs.  It uses the type of control in npcStyles to
                   1847: * determine what help to show.
                   1848: *
                   1849: ************************************************************************/
                   1850: 
                   1851: STATICFN VOID StylesHelp(VOID)
                   1852: {
                   1853:     WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
                   1854:             npcStyles->pwcd->HelpContext);
                   1855: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.