Annotation of os232sdk/toolkt20/c/samples/style/sty_dlg.c, revision 1.1.1.1

1.1       root        1: /*==============================================================*\
                      2:  *  Dialog.c - window procedures for the dialog boxes as well
                      3:  *              as utility procedures used by them
                      4:  *      Created 1990, Microsoft, IBM  Corp.
                      5:  *--------------------------------------------------------------
                      6:  *
                      7:  *  This module contains the Dialog Procedures for the user
                      8:  *  defined dialogs as well as any support code they need
                      9:  *
                     10:  *--------------------------------------------------------------
                     11:  *
                     12:  *  This source file contains the following functions:
                     13:  *
                     14:  *           DemoDlgProc(hwnd, msg, mp1, mp2)
                     15:  *           PresParamDemoDlgProc(hwnd, msg, mp1, mp2)
                     16:  *           AboutBoxDlgProc(hwnd, msg, mp1, mp2)
                     17:  *           LoadListBox(hwnd)
                     18:  *           InitPresParamDemoDlg(hwnd)
                     19:  *           UpdatePresParamDemoDlg(hwnd)
                     20:  *
                     21: \*==============================================================*/
                     22: 
                     23: /*--------------------------------------------------------------*\
                     24:  *  Include files, macros, defined constants, and externs
                     25: \*--------------------------------------------------------------*/
                     26: 
                     27: #define INCL_WINWINDOWMGR
                     28: #define INCL_WININPUT
                     29: #define INCL_WINLISTBOXES
                     30: #define INCL_WINENTRYFIELDS
                     31: #define INCL_WINSYS
                     32: #define INCL_GPILCIDS
                     33: #define INCL_DOSMEMMGR
                     34: 
                     35: #include <os2.h>
                     36: #include <string.h>
                     37: #include "sty_main.h"
                     38: #include "sty_dlg.h"
                     39: #include "sty_xtrn.h"
                     40: #include "sty_help.h"
                     41: 
                     42: #define COLORNAMELEN    20
                     43: #define NUMCOLORS       15  /* number of colors used in PP Demo */
                     44: #define NUMFONTS         4  /* number of fonts used in PP Demo */
                     45: #define FONTPOINTSIZE   80  /* point size to use in PP Demo */
                     46: #define PPFONTPOINTSIZE  2  /* length of font point prefix */
                     47: 
                     48: /*--------------------------------------------------------------*\
                     49:  *  Global variables
                     50: \*--------------------------------------------------------------*/
                     51: static CHAR apszPresParamColor[NUMCOLORS][COLORNAMELEN]; /* array of clr names */
                     52: static PSZ *apszPresParamFont = NULL;
                     53: static LONG lNumFonts;
                     54: 
                     55: /* set up an array of colors in the same order as the stringtable
                     56:     constants */
                     57: static ULONG aulColor[NUMCOLORS-1] = {  CLR_BLUE,
                     58:                                         CLR_RED,
                     59:                                         CLR_PINK,
                     60:                                         CLR_GREEN,
                     61:                                         CLR_CYAN,
                     62:                                         CLR_YELLOW,
                     63:                                         CLR_DARKGRAY,
                     64:                                         CLR_DARKBLUE,
                     65:                                         CLR_DARKRED,
                     66:                                         CLR_DARKPINK,
                     67:                                         CLR_DARKGREEN,
                     68:                                         CLR_DARKCYAN,
                     69:                                         CLR_BROWN,
                     70:                                         CLR_PALEGRAY
                     71:                                       };
                     72: 
                     73: 
                     74: /*--------------------------------------------------------------*\
                     75:  *  Entry point declarations
                     76: \*--------------------------------------------------------------*/
                     77: 
                     78: MRESULT EXPENTRY AboutBoxDlgProc(HWND hwnd, USHORT msg,
                     79:                                   MPARAM mp1, MPARAM mp2);
                     80: MRESULT EXPENTRY DemoDlgProc(HWND hwnd, USHORT msg,
                     81:                                   MPARAM mp1, MPARAM mp2);
                     82: MRESULT EXPENTRY PresParamDemoDlgProc(HWND hwnd, USHORT msg,
                     83:                                   MPARAM mp1, MPARAM mp2);
                     84: BOOL LoadListBox(HWND hwnd);
                     85: BOOL InitPresParamDemoDlg(HWND hwnd);
                     86: BOOL UpdatePresParamDemoDlg(HWND hwnd);
                     87: VOID ShowDlgHelp(HWND hwnd);
                     88: 
                     89: 
                     90: /****************************************************************\
                     91:  *  Dialog procedure for the About dialog box
                     92:  *--------------------------------------------------------------
                     93:  *
                     94:  *  Name:   AboutBoxDlgProc(hwnd, msg, mp1, mp2)
                     95:  *
                     96:  *  Purpose: Processes all messages sent to the About Box
                     97:  *
                     98:  *  Usage:  Called for each message sent to the About Box
                     99:  *          dialog box.
                    100:  *
                    101:  *  Method: the about box only has a button control so this
                    102:  *          routine only processes WM_COMMAND messages.  Any
                    103:  *          WM_COMMAND posted must have come from the Ok
                    104:  *          button so we dismiss the dialog upon receiving it.
                    105:  *
                    106:  *  Returns: Dependent upon message sent
                    107:  *
                    108: \****************************************************************/
                    109: MRESULT EXPENTRY AboutBoxDlgProc(hwnd, msg, mp1, mp2)
                    110: HWND hwnd;      /* handle of window */
                    111: USHORT msg;     /* id of message */
                    112: MPARAM mp1;     /* first message parameter */
                    113: MPARAM mp2;     /* second message parameter */
                    114: {
                    115:     switch(msg)  {
                    116:         case WM_COMMAND:
                    117:             /* no matter what the command, close the dialog */
                    118:             WinDismissDlg(hwnd, TRUE);
                    119:             break;
                    120: 
                    121:         case WM_HELP:
                    122:             ShowDlgHelp(hwnd);
                    123:             break;
                    124: 
                    125:         default:
                    126:             return(WinDefDlgProc(hwnd, msg, mp1, mp2));
                    127:             break;
                    128:     }
                    129: 
                    130:     return 0L;
                    131: 
                    132: }   /* AboutBoxDlgProc() */
                    133: 
                    134: /****************************************************************\
                    135:  *  Dialog procedure for the Dialog control demo dialogs
                    136:  *--------------------------------------------------------------
                    137:  *
                    138:  *  Name:   DemoDlgProc(hwnd, msg, mp1, mp2)
                    139:  *
                    140:  *  Purpose: Processes all messages sent to all Demo dialogs.
                    141:  *          The Demo dialogs only have an Ok and a Help button
                    142:  *          so they can all share this dialog proc.
                    143:  *
                    144:  *  Usage:  Called for each message sent to a demo dialog box.
                    145:  *
                    146:  *  Method: a switch statement branches to the routines to be
                    147:  *          performed for each message processed.  Any messages
                    148:  *          not specifically process are passed to the default
                    149:  *          window procedure WinDefDlgProc()
                    150:  *
                    151:  *  Returns: Dependent upon message sent
                    152:  *
                    153: \****************************************************************/
                    154: MRESULT EXPENTRY DemoDlgProc(hwnd, msg, mp1, mp2)
                    155: HWND hwnd;      /* handle of window */
                    156: USHORT msg;     /* id of message */
                    157: MPARAM mp1;     /* first message parameter */
                    158: MPARAM mp2;     /* second message parameter */
                    159: {
                    160:     switch(msg)  {
                    161:         case WM_INITDLG:
                    162:             switch(SHORT1FROMMP(mp2))  {
                    163:                 /*---------------------------------------------*
                    164:                  * The ShowDemoDlg() filled mp2 with the id of
                    165:                  * the dialog template used to create the
                    166:                  * dialog box.  If the dialog contains listboxes
                    167:                  * or comboboxes, fill them with text.
                    168:                  *---------------------------------------------*/
                    169: 
                    170:                 case IDD_LISTBOXDLG:
                    171:                     /* Load some text into the list boxes.  If any of the
                    172:                         LoadListBox() routines fail, abort the dialog */
                    173:                     if(
                    174:                     !LoadListBox(WinWindowFromID(hwnd, IDC_LISTBOX)) ||
                    175:                     !LoadListBox(WinWindowFromID(hwnd, IDC_MULTISELLISTBOX)))
                    176:                         WinDismissDlg(hwnd, FALSE);
                    177:                     break;
                    178: 
                    179:                 case IDD_COMBOBOXDLG:
                    180:                     /* Load some text into the combo boxes.  If any of the
                    181:                         LoadListBox() routines fail, abort the dialog */
                    182:                     if(!LoadListBox(WinWindowFromID(hwnd, IDC_SIMPLE)) ||
                    183:                        !LoadListBox(WinWindowFromID(hwnd, IDC_DROPDOWN)) ||
                    184:                        !LoadListBox(WinWindowFromID(hwnd, IDC_DROPDOWNLIST)))
                    185:                         WinDismissDlg(hwnd, FALSE);
                    186:                     break;
                    187: 
                    188:                 default:
                    189:                     break;
                    190:             }
                    191:             return FALSE;
                    192:             break;
                    193: 
                    194:         case WM_COMMAND:
                    195:             if(SHORT1FROMMP(mp1) == IDC_OK || SHORT1FROMMP(mp1) == IDC_CANCEL)
                    196:                 /* close the dialog if the Ok button is presssed */
                    197:                 WinDismissDlg(hwnd, TRUE);
                    198:             break;
                    199: 
                    200:         case WM_HELP:
                    201:             ShowDlgHelp(hwnd);
                    202:             break;
                    203: 
                    204:         default:
                    205:             return(WinDefDlgProc(hwnd, msg, mp1, mp2));
                    206:             break;
                    207:     }
                    208: 
                    209:     return 0L;
                    210: 
                    211: }   /* DemoDlgProc() */
                    212: 
                    213: /****************************************************************\
                    214:  *  Loads the given listbox with strings of 0 to 9
                    215:  *--------------------------------------------------------------
                    216:  *
                    217:  *  Name:   LoadListBox(hwnd)
                    218:  *
                    219:  *  Purpose: Loads the demo list box with 0 through 9
                    220:  *
                    221:  *  Usage:  Called each time a demo list box is initialized
                    222:  *
                    223:  *  Method: a for 0 to 9 loop is converts the INT to a string
                    224:  *          which is added to the listbo via LM_INSERTITEM
                    225:  *
                    226:  *  Returns: TRUE if list box is loaded successfully, FALSE otherwise
                    227:  *
                    228: \****************************************************************/
                    229: BOOL LoadListBox(hwnd)
                    230: HWND hwnd;      /* handle of list box window */
                    231: {
                    232:     register SHORT sT;
                    233:     CHAR szT[MESSAGELEN];
                    234:     SHORT sRet;
                    235: 
                    236:     for(sT = 0; sT < 10; sT++)  {
                    237:         if(!WinLoadString(hab,
                    238:                           NULL,
                    239:                           IDS_LISTBOX1 + sT,
                    240:                           MESSAGELEN,
                    241:                           (PSZ)szT))  {
                    242: 
                    243:             MessageBox(hwndMain,
                    244:                        IDMSG_CANNOTLOADSTRING,
                    245:                        MB_OK | MB_ERROR,
                    246:                        FALSE);
                    247: 
                    248:             return FALSE;
                    249:         }
                    250: 
                    251:         sRet = (SHORT)WinSendMsg(hwnd,
                    252:                                  LM_INSERTITEM,
                    253:                                  MPFROMSHORT(LIT_SORTASCENDING),
                    254:                                  MPFROMP((PSZ)szT));
                    255: 
                    256:         if(sRet == LIT_ERROR || sRet == LIT_MEMERROR)  {
                    257:             MessageBox(hwndMain,
                    258:                        IDMSG_CANNOTLOADSTRING,
                    259:                        MB_OK | MB_ERROR,
                    260:                        FALSE);
                    261: 
                    262:             return FALSE;
                    263:         }
                    264:     }
                    265: 
                    266:     return TRUE;
                    267: 
                    268: }   /* LoadListBox() */
                    269: 
                    270: 
                    271: /****************************************************************\
                    272:  *  Dialog procedure for the Presentation Parameter demo dialog
                    273:  *--------------------------------------------------------------
                    274:  *
                    275:  *  Name:   PresParamDemoDlgProc(hwnd, msg, mp1, mp2)
                    276:  *
                    277:  *  Purpose: Processes all messages sent to the PresParamDemo dialog
                    278:  *
                    279:  *  Usage:  Called for each message sent to the PresParamDemo
                    280:  *          dialog box.
                    281:  *
                    282:  *  Method: a switch statement branches to the routines to be
                    283:  *          performed for each message processed.  Any messages
                    284:  *          not specifically process are passed to the default
                    285:  *          window procedure WinDefDlgProc()
                    286:  *
                    287:  *  Returns: Dependent upon message sent
                    288:  *
                    289: \****************************************************************/
                    290: MRESULT EXPENTRY PresParamDemoDlgProc(hwnd, msg, mp1, mp2)
                    291: HWND hwnd;      /* handle of window */
                    292: USHORT msg;     /* id of message */
                    293: MPARAM mp1;     /* first message parameter */
                    294: MPARAM mp2;     /* second message parameter */
                    295: {
                    296:     switch(msg)  {
                    297:         case WM_INITDLG:
                    298:             /* if initialization fails, abort the dialog */
                    299:             if(!InitPresParamDemoDlg(hwnd))
                    300:                 WinDismissDlg(hwnd, FALSE);
                    301:             return FALSE;
                    302:             break;
                    303: 
                    304:         case WM_COMMAND:
                    305:             switch(SHORT1FROMMP(mp1))  {
                    306:                 case IDC_CANCEL:      /* if done, close the dialog */
                    307:                     WinDismissDlg(hwnd, TRUE);
                    308:                     break;
                    309: 
                    310:                 case IDC_APPLY:     /* update the dialog */
                    311:                     UpdatePresParamDemoDlg(hwnd);
                    312:                     break;
                    313: 
                    314:                 default:
                    315:                     break;
                    316:             }
                    317:             break;
                    318: 
                    319:         case WM_HELP:
                    320:             ShowDlgHelp(hwnd);
                    321:             break;
                    322: 
                    323:         default:
                    324:             return(WinDefDlgProc(hwnd, msg, mp1, mp2));
                    325:             break;
                    326:     }
                    327: 
                    328:     return 0L;
                    329: 
                    330: }   /* PresParamDemoDlgProc() */
                    331: 
                    332: /****************************************************************\
                    333:  *  Initializes the Presentation Parameter Dialog
                    334:  *--------------------------------------------------------------
                    335:  *
                    336:  *  Name:   InitPresParamDemoDlg(hwnd)
                    337:  *
                    338:  *  Purpose: Places the colors and fonts into the PresParamDemoDlg's
                    339:  *          comboboxes
                    340:  *
                    341:  *  Usage:  Called when the PP demo dialog is initialized
                    342:  *
                    343:  *  Method: LM_INSERTITEM is sent to each combobox for the
                    344:  *          color or font string added to the combobox
                    345:  *
                    346:  *  Returns: TRUE if initialization is successfull, FALSE if not
                    347:  *
                    348: \****************************************************************/
                    349: BOOL InitPresParamDemoDlg(hwnd)
                    350: HWND hwnd;      /* handle of the dialog window */
                    351: {
                    352:     HWND hwndT;
                    353:     register SHORT sT;
                    354:     SHORT sRet;
                    355:     PFONTMETRICS pfm, pfmSave;
                    356:     LONG lT, lFonts;
                    357:     HPS hps;
                    358:     PSZ *ppszT;
                    359:     BOOL fHaveFont;
                    360: 
                    361: 
                    362:     /* load the color table */
                    363:     for(sT = 0; sT < NUMCOLORS; sT++)  {
                    364:         if(!WinLoadString(hab,
                    365:                           NULL,
                    366:                           sT + IDS_FIRSTCOLOR,
                    367:                           COLORNAMELEN,
                    368:                           (PSZ)apszPresParamColor[sT]))  {
                    369: 
                    370:             MessageBox(hwndMain,
                    371:                        IDMSG_CANNOTLOADSTRING,
                    372:                        MB_OK | MB_ERROR,
                    373:                        FALSE);
                    374: 
                    375:             return FALSE;
                    376:         }
                    377:     }
                    378: 
                    379:     /* load foreground color combo box */
                    380:     hwndT = WinWindowFromID(hwnd, IDC_FORECOLORLIST);
                    381: 
                    382:     for(sT = 0; sT < NUMCOLORS; sT++)  {
                    383:         sRet = (SHORT)WinSendMsg(hwndT,
                    384:                                  LM_INSERTITEM,
                    385:                                  MPFROMSHORT(LIT_SORTASCENDING),
                    386:                                  MPFROMP((PSZ)apszPresParamColor[sT]));
                    387: 
                    388:         if(sT == LIT_ERROR || sT == LIT_MEMERROR)  {
                    389:             MessageBox(hwndMain,
                    390:                        IDMSG_CANNOTLOADSTRING,
                    391:                        MB_OK | MB_ERROR,
                    392:                        FALSE);
                    393: 
                    394:             return FALSE;
                    395:         }
                    396: 
                    397:     }
                    398: 
                    399:     /* load background color combo box */
                    400:     hwndT = WinWindowFromID(hwnd, IDC_BACKCOLORLIST);
                    401: 
                    402:     for(sT = 0; sT < NUMCOLORS; sT++)  {
                    403:         sRet = (SHORT)WinSendMsg(hwndT,
                    404:                                  LM_INSERTITEM,
                    405:                                  MPFROMSHORT(LIT_SORTASCENDING),
                    406:                                  MPFROMP((PSZ)apszPresParamColor[sT]));
                    407: 
                    408:         if(sT == LIT_ERROR || sT == LIT_MEMERROR)  {
                    409:             MessageBox(hwndMain,
                    410:                        IDMSG_CANNOTLOADSTRING,
                    411:                        MB_OK | MB_ERROR,
                    412:                        FALSE);
                    413: 
                    414:             return FALSE;
                    415:         }
                    416:     }
                    417: 
                    418: 
                    419:     /* Fonts.  Find all of the fonts of point size desired and normal
                    420:         weight.  Put the facenames in the combo box */
                    421:     hwndT = WinWindowFromID(hwnd, IDC_FONTLIST);
                    422:     hps = WinGetPS(hwndT);
                    423: 
                    424:     /* determine the number of fonts available */
                    425:     lFonts = 0L;
                    426:     lT = 0L;
                    427:     lFonts = GpiQueryFonts(hps,
                    428:                            QF_PUBLIC,
                    429:                            NULL,
                    430:                            &lT,
                    431:                            (ULONG)sizeof(FONTMETRICS),
                    432:                            (PFONTMETRICS)NULL);
                    433: 
                    434:     if(lFonts == GPI_ALTERROR)  {
                    435:             MessageBox(hwndMain,
                    436:                        IDMSG_CANNOTLOADFONTS,
                    437:                        MB_OK | MB_ERROR,
                    438:                        FALSE);
                    439: 
                    440:             WinReleasePS(hps);
                    441:             return FALSE;
                    442:     }
                    443: 
                    444: 
                    445:     /* allocate buffer for fontmetric structures */
                    446:     if(DosAllocMem((PPVOID)&pfm,
                    447:                     lFonts * (ULONG)sizeof(FONTMETRICS),
                    448:                     fALLOC))  {
                    449:             MessageBox(hwndMain,
                    450:                        IDMSG_CANNOTALLOCATEMEMORY,
                    451:                        MB_OK | MB_ERROR,
                    452:                        FALSE);
                    453: 
                    454:             WinReleasePS(hps);
                    455:             return FALSE;
                    456:     }
                    457:     pfmSave = pfm;
                    458: 
                    459:     /* get all fonts */
                    460:     lT = GpiQueryFonts(hps,
                    461:                        QF_PUBLIC,
                    462:                        NULL,
                    463:                        &lFonts,
                    464:                        (ULONG)sizeof(FONTMETRICS),
                    465:                        (PFONTMETRICS)pfm);
                    466: 
                    467:     WinReleasePS(hps);
                    468: 
                    469:     if(lT == GPI_ALTERROR)  {
                    470:             MessageBox(hwndMain,
                    471:                        IDMSG_CANNOTLOADFONTS,
                    472:                        MB_OK | MB_ERROR,
                    473:                        FALSE);
                    474: 
                    475:             return FALSE;
                    476:     }
                    477: 
                    478:     /* allocate buffer for array of string names, freeing the first
                    479:         buffer if necessary */
                    480:     if(apszPresParamFont)  {
                    481:         ppszT = apszPresParamFont;
                    482:         while(*ppszT)  {
                    483:             DosFreeMem(*ppszT++);
                    484:         }
                    485: 
                    486:         DosFreeMem(apszPresParamFont);
                    487:     }
                    488: 
                    489:     if(DosAllocMem((PPVOID)&apszPresParamFont,
                    490:                     (lFonts + 1L) * (ULONG)sizeof(PSZ),
                    491:                     fALLOC))  {
                    492:             MessageBox(hwndMain,
                    493:                        IDMSG_CANNOTALLOCATEMEMORY,
                    494:                        MB_OK | MB_ERROR,
                    495:                        FALSE);
                    496: 
                    497:             DosFreeMem((PVOID)pfmSave);
                    498:             apszPresParamFont = NULL;
                    499:             return FALSE;
                    500:     }
                    501: 
                    502:     /* initialize array to NULL */
                    503:     lT = 0L;
                    504:     ppszT = apszPresParamFont;
                    505:     while(lT++ < lFonts)
                    506:         *ppszT++ = (PSZ)NULL;
                    507:     *ppszT = (PSZ)NULL;
                    508: 
                    509: 
                    510:     /* walk through all fonts.  If the font matches the point size
                    511:         desired and has a weight and width class of normal (5) and
                    512:         no special attributes (e. g. italic, underline, etc.).  If
                    513:         it does, then add its string to the combo box */
                    514:     lNumFonts = 0L;
                    515:     ppszT = apszPresParamFont;
                    516: 
                    517:     while(lFonts--)  {
                    518:         if(pfm->sNominalPointSize == FONTPOINTSIZE &&
                    519:            pfm->usWeightClass == 5 &&
                    520:            pfm->usWidthClass == 5 &&
                    521:            pfm->fsSelection == 0)  {
                    522: 
                    523:             /* make sure we don't have this font.  If we don't,
                    524:                 then add the font to the list */
                    525:             lT = 0L;
                    526:             fHaveFont = FALSE;
                    527:             while(lT < lNumFonts)  {
                    528:                 if(!strcmp(pfm->szFacename,
                    529:                             apszPresParamFont[(INT)lT]))  {
                    530:                     fHaveFont = TRUE;
                    531:                     break;
                    532:                 } else
                    533:                     lT++;
                    534:             }
                    535: 
                    536:             if(!fHaveFont)  {
                    537:                 if(DosAllocMem((PPVOID)ppszT,
                    538:                                 (LONG)(FACESIZE * sizeof(CHAR)),
                    539:                                 fALLOC))  {
                    540: 
                    541:                         MessageBox(hwndMain,
                    542:                                    IDMSG_CANNOTALLOCATEMEMORY,
                    543:                                    MB_OK | MB_ERROR,
                    544:                                    FALSE);
                    545: 
                    546:                         DosFreeMem((PVOID)pfmSave);
                    547:                         return FALSE;
                    548:                 }
                    549: 
                    550:                 strcpy(*ppszT++, pfm->szFacename);
                    551:                 lNumFonts++;
                    552:             }
                    553:         }
                    554: 
                    555:         pfm++;
                    556:     }
                    557: 
                    558: 
                    559:     /* install the name of each font into the combo box */
                    560:     ppszT = apszPresParamFont;
                    561:     while(*ppszT)  {
                    562:         lT = (LONG)WinSendMsg(hwndT,
                    563:                               LM_INSERTITEM,
                    564:                               MPFROMSHORT(LIT_SORTASCENDING),
                    565:                               MPFROMP((PSZ)*ppszT++));
                    566: 
                    567:         if(sT == LIT_ERROR || sT == LIT_MEMERROR)  {
                    568:             MessageBox(hwndMain,
                    569:                        IDMSG_CANNOTLOADSTRING,
                    570:                        MB_OK | MB_ERROR,
                    571:                        FALSE);
                    572: 
                    573:             DosFreeMem((PVOID)pfmSave);
                    574:             return FALSE;
                    575:         }
                    576:     }
                    577: 
                    578:     /* add "Default" text onto the end */
                    579:     lT = (LONG)WinSendMsg(hwndT,
                    580:                   LM_INSERTITEM,
                    581:                   MPFROMSHORT(LIT_SORTASCENDING),
                    582:                   MPFROMP(apszPresParamColor[IDS_DEFAULT - IDS_FIRSTCOLOR]));
                    583: 
                    584:     if(sT == LIT_ERROR || sT == LIT_MEMERROR)  {
                    585:         MessageBox(hwndMain,
                    586:                    IDMSG_CANNOTLOADSTRING,
                    587:                    MB_OK | MB_ERROR,
                    588:                    FALSE);
                    589: 
                    590:         DosFreeMem((PVOID)pfmSave);
                    591:         return FALSE;
                    592:     }
                    593: 
                    594: 
                    595:     DosFreeMem((PVOID)pfmSave);
                    596: 
                    597:     return TRUE;
                    598: 
                    599: }   /* InitPresParamDemoDlg() */
                    600: 
                    601: /****************************************************************\
                    602:  *  Updates the Presentation Parameters in the PP Demo Dialog
                    603:  *--------------------------------------------------------------
                    604:  *
                    605:  *  Name:   UpdatePresParamDemoDlg(hwnd)
                    606:  *
                    607:  *  Purpose: Sets/Removes the Presentation Parameter of the
                    608:  *          sample text window depending upon the parameters
                    609:  *          chosen
                    610:  *
                    611:  *  Usage:  Called when user wants to update the window
                    612:  *
                    613:  *  Method: The string of each combobox is queried and then the
                    614:  *          color or font is set depending upon the string
                    615:  *          chosen
                    616:  *
                    617:  *  Returns:
                    618:  *
                    619: \****************************************************************/
                    620: BOOL UpdatePresParamDemoDlg(hwnd)
                    621: HWND hwnd;      /* handle of the dialog window */
                    622: {
                    623:     HWND hwndT, hwndSampleText, hwndSampleButton;
                    624:     CHAR szT[COLORNAMELEN];
                    625:     BYTE abBuf[FACESIZE + PPFONTPOINTSIZE];
                    626:     LONG clr, lPP;
                    627:     SHORT sT;
                    628: 
                    629:     /* get window handle of the sample text box */
                    630:     hwndSampleText = WinWindowFromID(hwnd, IDC_SAMPLETEXT);
                    631:     hwndSampleButton = WinWindowFromID(hwnd, IDC_CHECKBOX);
                    632: 
                    633:     /* get the text of the foreground color combobox */
                    634:     hwndT = WinWindowFromID(hwnd, IDC_FORECOLORLIST);
                    635: 
                    636:     if(WinQueryWindowText(hwndT, COLORNAMELEN, (PSZ)szT))  {
                    637: 
                    638:         /* find the text in the list of color names */
                    639:         sT = 0;
                    640:         while(sT < NUMCOLORS)  {
                    641:             if(!strcmp(szT, apszPresParamColor[sT]))  {
                    642:                 clr = aulColor[sT];
                    643:                 break;
                    644:             } else
                    645:                 sT++;
                    646:         }
                    647: 
                    648:         /* if color is not default, set the color.  If the default is
                    649:             selected, then remove the color presentation parameter if
                    650:             it exists.  If the value is not a valid color, then don't
                    651:             don't do anything */
                    652:         if(sT < NUMCOLORS)  {
                    653:             sT += IDS_FIRSTCOLOR;
                    654:             if(sT < IDS_DEFAULT)  {
                    655:                 if(!WinSetPresParam(hwndSampleText,
                    656:                                     PP_FOREGROUNDCOLORINDEX,
                    657:                                     (ULONG)sizeof(LONG),
                    658:                                     (PVOID)&clr) ||
                    659:                    !WinSetPresParam(hwndSampleButton,
                    660:                                     PP_FOREGROUNDCOLORINDEX,
                    661:                                     (ULONG)sizeof(LONG),
                    662:                                     (PVOID)&clr))  {
                    663: 
                    664:                         MessageBox(hwndMain,
                    665:                                    IDMSG_CANNOTSETPP,
                    666:                                    MB_OK | MB_ERROR,
                    667:                                    FALSE);
                    668:                 }
                    669: 
                    670: 
                    671:             } else {
                    672:                 /* If setting presentation parameter to the default, remove
                    673:                     the presentation parameter, but only if it has been
                    674:                     set */
                    675:                 if(sT == IDS_DEFAULT &&
                    676:                    WinQueryPresParam(hwndSampleText,
                    677:                                      PP_FOREGROUNDCOLORINDEX,
                    678:                                      0L,
                    679:                                      &lPP,
                    680:                                      (LONG)sizeof(LONG),
                    681:                                      (PVOID)&clr,
                    682:                                      QPF_NOINHERIT) != NULL)  {
                    683: 
                    684:                    if(!WinRemovePresParam(hwndSampleText,
                    685:                                           PP_FOREGROUNDCOLORINDEX) ||
                    686:                       !WinRemovePresParam(hwndSampleButton,
                    687:                                           PP_FOREGROUNDCOLORINDEX))  {
                    688: 
                    689:                        MessageBox(hwndMain,
                    690:                                   IDMSG_CANNOTSETPP,
                    691:                                   MB_OK | MB_ERROR,
                    692:                                   FALSE);
                    693:                    }
                    694:                 }
                    695:             }
                    696:         }
                    697:     }
                    698: 
                    699: 
                    700: 
                    701:     /* Do the same for the background color combobox */
                    702:     hwndT = WinWindowFromID(hwnd, IDC_BACKCOLORLIST);
                    703:     if(WinQueryWindowText(hwndT, COLORNAMELEN, (PSZ)szT))  {
                    704: 
                    705:         /* find the text in the list of color names */
                    706:         sT = 0;
                    707:         while(sT < NUMCOLORS)  {
                    708:             if(!strcmp(szT, apszPresParamColor[sT])) {
                    709:                 clr = aulColor[sT];
                    710:                 break;
                    711:             } else
                    712:                 sT++;
                    713:         }
                    714: 
                    715:         /* if color is not default, set the color.  If the default is
                    716:             selected, then remove the color presentation parameter.  If
                    717:             the value is not a valid color, the don't do anything */
                    718:         if(sT < NUMCOLORS)  {
                    719:             sT += IDS_FIRSTCOLOR;
                    720:             if(sT < IDS_DEFAULT)  {
                    721:                 if(!WinSetPresParam(hwndSampleText,
                    722:                                     PP_BACKGROUNDCOLORINDEX,
                    723:                                     (ULONG)sizeof(LONG),
                    724:                                     (PVOID)&clr) ||
                    725:                    !WinSetPresParam(hwndSampleButton,
                    726:                                     PP_BACKGROUNDCOLORINDEX,
                    727:                                     (ULONG)sizeof(LONG),
                    728:                                     (PVOID)&clr))  {
                    729: 
                    730:                         MessageBox(hwndMain,
                    731:                                    IDMSG_CANNOTSETPP,
                    732:                                    MB_OK | MB_ERROR,
                    733:                                    FALSE);
                    734:                 }
                    735: 
                    736:             } else {
                    737:                 if(sT == IDS_DEFAULT &&
                    738:                    WinQueryPresParam(hwndSampleText,
                    739:                                      PP_BACKGROUNDCOLORINDEX,
                    740:                                      0L,
                    741:                                      &lPP,
                    742:                                      (LONG)sizeof(LONG),
                    743:                                      (PVOID)&clr,
                    744:                                      QPF_NOINHERIT) != NULL)  {
                    745: 
                    746:                     if(!WinRemovePresParam(hwndSampleText,
                    747:                                            PP_BACKGROUNDCOLORINDEX) ||
                    748:                        !WinRemovePresParam(hwndSampleButton,
                    749:                                            PP_BACKGROUNDCOLORINDEX))  {
                    750: 
                    751:                             MessageBox(hwndMain,
                    752:                                        IDMSG_CANNOTSETPP,
                    753:                                        MB_OK | MB_ERROR,
                    754:                                        FALSE);
                    755:                     }
                    756:                 }
                    757:             }
                    758:         }
                    759:     }
                    760: 
                    761: 
                    762:     /* get the text of the font combobox */
                    763:     hwndT = WinWindowFromID(hwnd, IDC_FONTLIST);
                    764:     if(WinQueryWindowText(hwndT, FACESIZE, (PSZ)szT))  {
                    765: 
                    766:         /* if Font selected is "Default", remove font pres. param. */
                    767:         if(!strcmp(szT, apszPresParamColor[IDS_DEFAULT - IDS_FIRSTCOLOR]))  {
                    768:             if(WinQueryPresParam(hwndSampleText,
                    769:                                  PP_FONTNAMESIZE,
                    770:                                  0L,
                    771:                                  &lPP,
                    772:                                  (LONG)(FACESIZE + PPFONTPOINTSIZE),
                    773:                                  (PVOID)abBuf,
                    774:                                  QPF_NOINHERIT) != NULL)  {
                    775:                 if(!WinRemovePresParam(hwndSampleText, PP_FONTNAMESIZE) ||
                    776:                    !WinRemovePresParam(hwndSampleButton, PP_FONTNAMESIZE))  {
                    777:                         MessageBox(hwndMain,
                    778:                                    IDMSG_CANNOTSETPP,
                    779:                                    MB_OK | MB_ERROR,
                    780:                                    FALSE);
                    781:                 }
                    782:             }
                    783:         } else {    /* font is not default */
                    784: 
                    785:             /*----------------------------------------------------*\
                    786:              *  abBuf will hold the font point size and name in
                    787:              *  the form <pt>.<name>.  First we fill abBuf with the
                    788:              *  font point prefix and then append the font name
                    789:              *  retrieved from the combobox.
                    790:             \*----------------------------------------------------*/
                    791: 
                    792:             if(!WinLoadString(hab,
                    793:                               NULL,
                    794:                               IDS_PPFONTPOINT,
                    795:                               COLORNAMELEN,
                    796:                               (PSZ)abBuf))  {
                    797: 
                    798:                 MessageBox(hwndMain,
                    799:                            IDMSG_CANNOTLOADSTRING,
                    800:                            MB_OK | MB_ERROR,
                    801:                            FALSE);
                    802: 
                    803:                 return FALSE;
                    804:             }
                    805: 
                    806:             strcat((PSZ)abBuf, szT);
                    807: 
                    808:             if(!WinSetPresParam(hwndSampleText,
                    809:                                 PP_FONTNAMESIZE,
                    810:                                 (ULONG)strlen((PSZ)abBuf) + 1L,
                    811:                                 (PVOID)abBuf) ||
                    812:                !WinSetPresParam(hwndSampleButton,
                    813:                                 PP_FONTNAMESIZE,
                    814:                                 (ULONG)strlen((PSZ)abBuf) + 1L,
                    815:                                 (PVOID)abBuf))  {
                    816: 
                    817:                         MessageBox(hwndMain,
                    818:                                    IDMSG_CANNOTSETPP,
                    819:                                    MB_OK | MB_ERROR,
                    820:                                    FALSE);
                    821:             }
                    822:         }
                    823:     }
                    824: 
                    825:     return TRUE;
                    826: 
                    827: }   /* UpdatePresParamDemoDlg() */
                    828: 
                    829: /****************************************************************\
                    830:  *  Shows the help panel for the given dialog window
                    831:  *--------------------------------------------------------------
                    832:  *
                    833:  *  Name:   ShowDlgHelp(hwnd)
                    834:  *
                    835:  *  Purpose: Displays the help panel for the current selected
                    836:  *           item in the dialog window
                    837:  *
                    838:  *  Usage:  Called each time a WM_HELP message is posted to
                    839:  *          a dialog
                    840:  *
                    841:  *  Method: gets the id value of the window and determine which
                    842:  *          help panel to display.  Then sends a message to
                    843:  *          the help instance to display the panel.  If the dialog
                    844:  *          or item is not included here, then the unknown dialog
                    845:  *          or unknown item panel is displayed.
                    846:  *
                    847:  *  Returns:
                    848:  *
                    849: \****************************************************************/
                    850: VOID ShowDlgHelp(hwnd)
                    851: HWND hwnd;      /* handle of list box window */
                    852: {
                    853:     SHORT idPanel, idDlg, idItem;
                    854:     HWND hwndFocus;
                    855: 
                    856:     /* get the id of the dialog box */
                    857:     idDlg = WinQueryWindowUShort(hwnd, QWS_ID);
                    858: 
                    859:     /* finds which window has the focus and gets its id */
                    860:     hwndFocus = WinQueryFocus(HWND_DESKTOP, FALSE);
                    861:     idItem = WinQueryWindowUShort(hwndFocus, QWS_ID);
                    862: 
                    863:     switch(idDlg)  {
                    864:         case IDD_BUTTONSDLG:
                    865:             switch(idItem)  {
                    866:                 case IDC_RADIO1:
                    867:                 case IDC_RADIO2:
                    868:                 case IDC_RADIO3:
                    869:                     idPanel = PANEL_BUTTONSDLG_RADIO;
                    870:                     break;
                    871: 
                    872:                 case IDC_CHECKBOX:
                    873:                     idPanel = PANEL_BUTTONSDLG_CHECKBOX;
                    874:                     break;
                    875: 
                    876:                 case IDC_3STATE:
                    877:                     idPanel = PANEL_BUTTONSDLG_THREESTATE;
                    878:                     break;
                    879: 
                    880:                 case IDC_PUSHBUTTON:
                    881:                     idPanel = PANEL_BUTTONSDLG_PUSHBUTTON;
                    882:                     break;
                    883: 
                    884:                 case IDC_OK:
                    885:                     idPanel = PANEL_BUTTONSDLG_OK;
                    886:                     break;
                    887: 
                    888:                 case IDC_HELP:
                    889:                     idPanel = PANEL_BUTTONSDLG_HELP;
                    890:                     break;
                    891: 
                    892:                 default:
                    893:                     idPanel = PANEL_UNKNOWN;
                    894:                     break;
                    895:             }
                    896:             break;
                    897: 
                    898:         case IDD_LISTBOXDLG:
                    899:             switch(idItem)  {
                    900:                 case IDC_LISTBOX:
                    901:                     idPanel = PANEL_LISTBOXDLG_SINGLE;
                    902:                     break;
                    903: 
                    904:                 case IDC_MULTISELLISTBOX:
                    905:                     idPanel = PANEL_LISTBOXDLG_MULTIPLE;
                    906:                     break;
                    907: 
                    908:                 case IDC_OK:
                    909:                     idPanel = PANEL_LISTBOXDLG_OK;
                    910:                     break;
                    911: 
                    912:                 case IDC_HELP:
                    913:                     idPanel = PANEL_LISTBOXDLG_HELP;
                    914:                     break;
                    915: 
                    916:                 default:
                    917:                     idPanel = PANEL_UNKNOWN;
                    918:                     break;
                    919:             }
                    920:             break;
                    921: 
                    922:         case IDD_COMBOBOXDLG:
                    923:             switch(idItem)  {
                    924:                 case IDC_SIMPLE:
                    925:                     idPanel = PANEL_COMBOBOXDLG_SIMPLE;
                    926:                     break;
                    927: 
                    928:                 case IDC_DROPDOWN:
                    929:                     idPanel = PANEL_COMBOBOXDLG_DROPDOWN;
                    930:                     break;
                    931: 
                    932:                 case IDC_DROPDOWNLIST:
                    933:                     idPanel = PANEL_COMBOBOXDLG_DROPDOWNLIST;
                    934:                     break;
                    935: 
                    936:                 case IDC_OK:
                    937:                     idPanel = PANEL_COMBOBOXDLG_OK;
                    938:                     break;
                    939: 
                    940:                 case IDC_HELP:
                    941:                     idPanel = PANEL_COMBOBOXDLG_HELP;
                    942:                     break;
                    943: 
                    944:                 default:
                    945:                     /* check to see if window that has the focus is the
                    946:                         entry field of the combobox.  If it is, then
                    947:                         call the appropriate combobox help panel.  If
                    948:                         not, then call the unknown panel */
                    949:                     if(WinWindowFromID(WinWindowFromID(hwnd, IDC_SIMPLE),
                    950:                                         CBID_EDIT) == hwndFocus)
                    951:                         idPanel = PANEL_COMBOBOXDLG_SIMPLE;
                    952:                     else
                    953:                         if(WinWindowFromID(WinWindowFromID(hwnd, IDC_DROPDOWN),
                    954:                                             CBID_EDIT) == hwndFocus)
                    955:                             idPanel = PANEL_COMBOBOXDLG_DROPDOWN;
                    956:                         else
                    957:                             if(WinWindowFromID(
                    958:                                   WinWindowFromID(hwnd, IDC_DROPDOWNLIST),
                    959:                                                 CBID_EDIT) == hwndFocus)
                    960:                                 idPanel = PANEL_COMBOBOXDLG_DROPDOWNLIST;
                    961:                             else
                    962:                                 idPanel = PANEL_UNKNOWN;
                    963:                     break;
                    964:             }
                    965:             break;
                    966: 
                    967:         case IDD_ENTRYFIELDDLG:
                    968:             switch(idItem)  {
                    969:                 case IDC_ENTRY:
                    970:                     idPanel = PANEL_ENTRYFIELDDLG_ENTRY;
                    971:                     break;
                    972: 
                    973:                 case IDC_MLE:
                    974:                     idPanel = PANEL_ENTRYFIELDDLG_MLE;
                    975:                     break;
                    976: 
                    977:                 case IDC_OK:
                    978:                     idPanel = PANEL_ENTRYFIELDDLG_OK;
                    979:                     break;
                    980: 
                    981:                 case IDC_HELP:
                    982:                     idPanel = PANEL_ENTRYFIELDDLG_HELP;
                    983:                     break;
                    984: 
                    985:                 default:
                    986:                     idPanel = PANEL_UNKNOWN;
                    987:                     break;
                    988:             }
                    989:             break;
                    990: 
                    991:         case IDD_STATICDLG:
                    992:             switch(idItem)  {
                    993:                 case IDC_OK:
                    994:                     idPanel = PANEL_STATICDLG_OK;
                    995:                     break;
                    996: 
                    997:                 case IDC_HELP:
                    998:                     idPanel = PANEL_STATICDLG_HELP;
                    999:                     break;
                   1000: 
                   1001:                 default:
                   1002:                     idPanel = PANEL_UNKNOWN;
                   1003:                     break;
                   1004:             }
                   1005:             break;
                   1006: 
                   1007:         case IDD_PPDEMODLG:
                   1008:             switch(idItem)  {
                   1009:                 case IDC_FORECOLORLIST:
                   1010:                     idPanel = PANEL_PPDEMODLG_FORECOLORLIST;
                   1011:                     break;
                   1012: 
                   1013:                 case IDC_BACKCOLORLIST:
                   1014:                     idPanel = PANEL_PPDEMODLG_BACKCOLORLIST;
                   1015:                     break;
                   1016: 
                   1017:                 case IDC_FONTLIST:
                   1018:                     idPanel = PANEL_PPDEMODLG_FONTLIST;
                   1019:                     break;
                   1020: 
                   1021:                 case IDC_CHECKBOX:
                   1022:                     idPanel = PANEL_PPDEMODLG_TESTBUTTON;
                   1023:                     break;
                   1024: 
                   1025:                 case IDC_CANCEL:
                   1026:                     idPanel = PANEL_PPDEMODLG_CANCEL;
                   1027:                     break;
                   1028: 
                   1029:                 case IDC_APPLY:
                   1030:                     idPanel = PANEL_PPDEMODLG_APPLY;
                   1031:                     break;
                   1032: 
                   1033:                 case IDC_HELP:
                   1034:                     idPanel = PANEL_PPDEMODLG_HELP;
                   1035:                     break;
                   1036: 
                   1037:                 default:
                   1038:                     /* check to see if window that has the focus is the
                   1039:                         entry field of the combobox.  If it is, then
                   1040:                         call the appropriate combobox help panel.  If
                   1041:                         not, then call the unknown panel */
                   1042:                     if(WinWindowFromID(
                   1043:                         WinWindowFromID(hwnd, IDC_FORECOLORLIST),
                   1044:                                         CBID_EDIT) == hwndFocus)
                   1045:                         idPanel = PANEL_PPDEMODLG_FORECOLORLIST;
                   1046:                     else
                   1047:                         if(WinWindowFromID(
                   1048:                             WinWindowFromID(hwnd, IDC_BACKCOLORLIST),
                   1049:                                             CBID_EDIT) == hwndFocus)
                   1050:                             idPanel = PANEL_PPDEMODLG_BACKCOLORLIST;
                   1051:                         else
                   1052:                             if(WinWindowFromID(
                   1053:                                 WinWindowFromID(hwnd, IDC_FONTLIST),
                   1054:                                                 CBID_EDIT) == hwndFocus)
                   1055:                                 idPanel = PANEL_PPDEMODLG_FONTLIST;
                   1056:                             else
                   1057:                                 idPanel = PANEL_UNKNOWN;
                   1058:                     break;
                   1059:             }
                   1060:             break;
                   1061: 
                   1062:         case IDD_ABOUTBOX:
                   1063:             idPanel = PANEL_ABOUTBOX;
                   1064:             break;
                   1065: 
                   1066:         default:
                   1067:             idPanel = PANEL_UNKNOWNDLG;
                   1068:             break;
                   1069: 
                   1070:     }
                   1071: 
                   1072:     DisplayHelpPanel(idPanel);
                   1073: 
                   1074: }   /* ShowDlgHelp() */

unix.superglobalmegacorp.com

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