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

1.1       root        1: /*==============================================================*\
                      2:  *  User.c - routines for handling messages not processed
                      3:  *              by the standard message processing routine
                      4:  *      Created 1990, Microsoft, IBM  Corp.
                      5:  *--------------------------------------------------------------
                      6:  *
                      7:  *  This module contains the code for processing messages sent
                      8:  *  to the standard window that the standard window does not
                      9:  *  process.  The application developer need only modify this
                     10:  *  file in order to implement new menu items or process
                     11:  *  messages not handled by the standard message routine.
                     12:  *
                     13:  *  This module also contains some routines that demonstate the
                     14:  *  various dialog box controls and message box types that can
                     15:  *  be used.  The sample code should be deleted when this
                     16:  *  module is modified for an application.  The demonstration
                     17:  *  code is identified by comments.
                     18:  *
                     19:  *--------------------------------------------------------------
                     20:  *
                     21:  *  This source file contains the following functions:
                     22:  *
                     23:  *      UserWndProc(hwnd, msg, mp1, mp2) - user window procedure
                     24:  *      UserCommand(mp1, mp2) - user WM_COMMAND processor
                     25:  *      SetForegroundColor(hwnd)
                     26:  *      SetBackgroundColor(MenuId)
                     27:  *      SetWindowText(hwnd)
                     28:  *
                     29: \*==============================================================*/
                     30: 
                     31: /*--------------------------------------------------------------*\
                     32:  *  Include files, macros, defined constants, and externs
                     33: \*--------------------------------------------------------------*/
                     34: 
                     35: #define INCL_WINMENUS
                     36: #define INCL_WINWINDOWMGR
                     37: #define INCL_WINCLIPBOARD
                     38: #define INCL_WINMLE
                     39: #define INCL_WINSTDFONT
                     40: #define INCL_GPILCIDS
                     41: #define INCL_GPIPRIMITIVES
                     42: 
                     43: #include <os2.h>
                     44: #include "sty_main.h"
                     45: #include "sty_xtrn.h"
                     46: #include "sty_dlg.h"
                     47: #include <string.h>
                     48: 
                     49: // #define FONT_DLG_ENABLED
                     50: 
                     51: /*--------------------------------------------------------------*\
                     52:  *  Global variables
                     53: \*--------------------------------------------------------------*/
                     54: ULONG clrForeground = CLR_NEUTRAL;          /* color for window text */
                     55: ULONG clrBackground = CLR_BACKGROUND;       /* color for window background */
                     56: 
                     57: /*--------------------------------------------------------------*\
                     58:  *  Entry point declarations
                     59: \*--------------------------------------------------------------*/
                     60: 
                     61: VOID SetForegroundColor(VOID);
                     62: VOID SetBackgroundColor(SHORT idMenu);
                     63: VOID SetFont(VOID);
                     64: MRESULT EXPENTRY DemoDlgProc(HWND hwnd, USHORT msg,
                     65:                                   MPARAM mp1, MPARAM mp2);
                     66: MRESULT EXPENTRY PresParamDemoDlgProc(HWND hwnd, USHORT msg,
                     67:                                   MPARAM mp1, MPARAM mp2);
                     68: VOID ShowDemoDlg(SHORT idMenuItem);
                     69: VOID ShowDemoMsgBox(SHORT idMenuItem);
                     70: 
                     71: 
                     72: /****************************************************************\
                     73:  *  Non-standard window message processing routine
                     74:  *--------------------------------------------------------------
                     75:  *
                     76:  *  Name:   UserWndProc(hwnd, msg, mp1, mp2)
                     77:  *
                     78:  *  Purpose: Process any messages sent to hwndMain that
                     79:  *              are not processed by the standard window
                     80:  *              procedure
                     81:  *
                     82:  *  Usage:  Routine is called for each message MainWndProc
                     83:  *          does not process
                     84:  *
                     85:  *  Method: A switch statement branches control based upon
                     86:  *          the message passed.  Any messages not processed
                     87:  *          here must be passed onto WinDefWindowProc()
                     88:  *
                     89:  *  Returns: Return value depended upon the message processed
                     90: \****************************************************************/
                     91: MRESULT UserWndProc(hwnd, msg, mp1, mp2)
                     92: HWND hwnd;      /* handle of window */
                     93: USHORT msg;     /* id of message */
                     94: MPARAM mp1;     /* first message parameter */
                     95: MPARAM mp2;     /* second message parameter */
                     96: {
                     97: 
                     98:     switch(msg)  {
                     99: 
                    100:     /*--------------------------------------------------------------*\
                    101:      *  Add case statements for message ids you wish to process
                    102:     \*--------------------------------------------------------------*/
                    103: 
                    104:         case WM_SIZE:
                    105:             /* re-size the MLE to be the same width and height as the
                    106:                 client window */
                    107:             WinSetWindowPos(hwndMLE,
                    108:                             HWND_TOP,
                    109:                             0,
                    110:                             0,
                    111:                             SHORT1FROMMP(mp2),
                    112:                             SHORT2FROMMP(mp2),
                    113:                             SWP_SIZE);
                    114:             break;
                    115: 
                    116:         case WM_SETFOCUS:
                    117:             if(SHORT1FROMMP(mp1))
                    118:                 WinPostMsg(hwnd, SM_SETFOCUS, NULL, NULL);
                    119:             break;
                    120: 
                    121:         case SM_SETFOCUS:
                    122:             WinSetFocus(HWND_DESKTOP, hwndMLE);
                    123:             break;
                    124: 
                    125:         default:    /* default must call WinDefWindowProc() */
                    126:             return(WinDefWindowProc(hwnd, msg, mp1, mp2));
                    127:             break;
                    128:     }
                    129: 
                    130:     return 0L;
                    131: 
                    132: }   /* UserWndProc() */
                    133: 
                    134: 
                    135: /****************************************************************\
                    136:  *  Non-standard menu item command processing procedure
                    137:  *--------------------------------------------------------------
                    138:  *
                    139:  *  Name:   UserCommand(mp1, mp2)
                    140:  *
                    141:  *  Purpose: Process any WM_COMMAND messages send to hwndMain
                    142:  *              that are not processed by MainCommand
                    143:  *
                    144:  *  Usage:  Routine is called for each WM_COMMAND that is
                    145:  *          not posted by a standard menu item
                    146:  *
                    147:  *  Method: A switch statement branches control based upon
                    148:  *          the id of the control which posted the message
                    149:  *
                    150:  *  Returns:
                    151: \****************************************************************/
                    152: VOID UserCommand(mp1, mp2)
                    153: MPARAM mp1;     /* first message parameter */
                    154: MPARAM mp2;     /* second message parameter */
                    155: {
                    156: 
                    157:     switch(SHORT1FROMMP(mp1))  {
                    158: 
                    159:     /*--------------------------------------------------------------*\
                    160:      *  Add case statements for menuitem ids you wish to process
                    161:     \*--------------------------------------------------------------*/
                    162: 
                    163: 
                    164: /*--------------------------------------------------------------*\
                    165:  *  The following code is for the demonstration code only.  It
                    166:  *  should be removed when modifying this file for your
                    167:  *  application.
                    168: \*--------------------------------------------------------------*/
                    169: 
                    170: #ifdef PALETTE_DLG_ENABLED
                    171:         case IDM_OPTIONSFORECOLOR:
                    172:             SetForegroundColor(hwndMLE);
                    173:             break;
                    174: #endif
                    175: 
                    176:         case IDM_OPTIONSBACKCOLORPINK:
                    177:         case IDM_OPTIONSBACKCOLORCYAN:
                    178:         case IDM_OPTIONSBACKCOLORYELLOW:
                    179:         case IDM_OPTIONSBACKCOLORDEFAULT:
                    180:             SetBackgroundColor(SHORT1FROMMP(mp1));
                    181:             break;
                    182: 
                    183: #ifdef FONT_DLG_ENABLED
                    184:         case IDM_OPTIONSFONT:
                    185:             SetFont();
                    186:             break;
                    187: #endif
                    188: 
                    189:         case IDM_DEMODLGBUTTONS:
                    190:         case IDM_DEMODLGLISTBOXES:
                    191:         case IDM_DEMODLGCOMBOBOXES:
                    192:         case IDM_DEMODLGENTRYFIELDS:
                    193:         case IDM_DEMODLGSTATIC:
                    194:             ShowDemoDlg(SHORT1FROMMP(mp1));
                    195:             break;
                    196: 
                    197:         case IDM_DEMOMSGBOXOK:
                    198:         case IDM_DEMOMSGBOXOKCANCEL:
                    199:         case IDM_DEMOMSGBOXYESNO:
                    200:         case IDM_DEMOMSGBOXYESNOCANCEL:
                    201:         case IDM_DEMOMSGBOXRETRYCANCEL:
                    202:         case IDM_DEMOMSGBOXABORT:
                    203:         case IDM_DEMOMSGBOXENTER:
                    204:         case IDM_DEMOMSGBOXENTERCANCEL:
                    205:         case IDM_DEMOMSGBOXQUERY:
                    206:         case IDM_DEMOMSGBOXWARNING:
                    207:         case IDM_DEMOMSGBOXINFO:
                    208:         case IDM_DEMOMSGBOXCRITICAL:
                    209:         case IDM_DEMOMSGBOXAPP:
                    210:         case IDM_DEMOMSGBOXSYS:
                    211:         case IDM_DEMOMSGBOXMOVEABLE:
                    212:         case IDM_DEMOMSGBOXHELP:
                    213:             ShowDemoMsgBox(SHORT1FROMMP(mp1));
                    214:             break;
                    215: 
                    216:         case IDM_DEMODLGPP:
                    217:             WinDlgBox(hwndMain,
                    218:                       hwndMain,
                    219:                       (PFNWP)PresParamDemoDlgProc,
                    220:                       NULL,
                    221:                       IDD_PPDEMODLG,
                    222:                       (PVOID)NULL);
                    223:             break;
                    224: 
                    225: 
                    226: /*--------------------------------------------------------------*\
                    227:  *  End of demonstration code
                    228: \*--------------------------------------------------------------*/
                    229: 
                    230: 
                    231:         default:
                    232:             break;
                    233:     }
                    234: 
                    235:     /* This routine currently doesn't use the mp2 parameter but       *\
                    236:      *  it is referenced here to prevent an 'Unreferenced Parameter'
                    237:     \*  warning at compile time.                                      */
                    238:     mp2;
                    239: 
                    240: }   /* UserCommand() */
                    241: 
                    242: 
                    243: 
                    244: /****************************************************************\
                    245:  *  Menu item intialization routine
                    246:  *--------------------------------------------------------------
                    247:  *
                    248:  *  Name:   InitMenu(mp1, mp2)
                    249:  *
                    250:  *  Purpose: Processes the WM_INITMENU message for the main window,
                    251:  *              disabling any menus that are not active
                    252:  *
                    253:  *  Usage:  Routine is called each time a menu is dropped
                    254:  *
                    255:  *  Method: A switch statement branches control based upon
                    256:  *          the id of the menu which is being displayed
                    257:  *
                    258:  *  Returns:
                    259: \****************************************************************/
                    260: VOID InitMenu(mp1, mp2)
                    261: MPARAM mp1;     /* first message parameter */
                    262: MPARAM mp2;     /* second message parameter */
                    263: {
                    264:     SHORT  fsFmtInfo;
                    265:     BOOL fEnable;
                    266: 
                    267:     switch(SHORT1FROMMP(mp1))  {
                    268:         case IDM_FILE:
                    269:             /*
                    270:              * The Print, Print Setup, and Page Setup menu items of the
                    271:              * File menu will be enabled if printing is enabled, otherwise
                    272:              * they will be disabled
                    273:              */
                    274: 
                    275:             EnableMenuItem(HWNDFROMMP(mp2), IDM_FILEPRINT, fPrintEnabled);
                    276:             EnableMenuItem(HWNDFROMMP(mp2), IDM_FILEPRINTSETUP, fPrintEnabled);
                    277:             EnableMenuItem(HWNDFROMMP(mp2), IDM_FILEPAGESETUP, fPrintEnabled);
                    278: 
                    279:             break;
                    280: 
                    281:         case IDM_HELP:
                    282:             /*
                    283:              * Enable or disable the Help menu depending upon whether the
                    284:              * help manager has been enabled
                    285:              */
                    286:             EnableMenuItem(HWNDFROMMP(mp2),
                    287:                           IDM_HELPHELPFORHELP, fHelpEnabled);
                    288: 
                    289:             EnableMenuItem(HWNDFROMMP(mp2),
                    290:                           IDM_HELPEXTENDED, fHelpEnabled);
                    291: 
                    292:             EnableMenuItem(HWNDFROMMP(mp2),
                    293:                           IDM_HELPKEYS, fHelpEnabled);
                    294: 
                    295:             EnableMenuItem(HWNDFROMMP(mp2),
                    296:                           IDM_HELPINDEX, fHelpEnabled);
                    297: 
                    298:             /** REMEMBER: add a case for IDM_HELPTUTORIAL if you include
                    299:                 the menu item   **/
                    300: 
                    301:             break;
                    302: 
                    303:         case IDM_EDIT:
                    304:             /* if text is selected in the MLE, the enable the Cut, Copy,
                    305:                 and Clear menus.  Otherwise, do not */
                    306:             fEnable = WinSendMsg(hwndMLE,
                    307:                                  MLM_QUERYSEL,
                    308:                                  MPFROMSHORT(MLFQS_MINSEL),
                    309:                                  NULL) != WinSendMsg(hwndMLE,
                    310:                                                      MLM_QUERYSEL,
                    311:                                                      MPFROMSHORT(MLFQS_MAXSEL),
                    312:                                                      NULL);
                    313: 
                    314:             EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITCUT, fEnable);
                    315:             EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITCOPY, fEnable);
                    316:             EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITCLEAR, fEnable);
                    317: 
                    318: 
                    319:             /* determine if the MLE can Undo the last action.  If it can't,
                    320:                 then disable he Undo menu */
                    321:             fEnable =
                    322:                 HIUSHORT(WinSendMsg(hwndMLE, MLM_QUERYUNDO, NULL, NULL)) != 0;
                    323: 
                    324:             EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITUNDO, fEnable);
                    325: 
                    326:             /* determine if the clipboard has some text on it.  If it
                    327:                 doesn't, then disable the Paste menu */
                    328:             if(WinOpenClipbrd(hab))  {
                    329:                 if(WinQueryClipbrdFmtInfo(hab, CF_TEXT, &fsFmtInfo))
                    330:                     fEnable = TRUE;
                    331:                 else
                    332:                     fEnable = FALSE;
                    333: 
                    334:                 WinCloseClipbrd(hab);
                    335:             } else
                    336:                 fEnable = TRUE;
                    337: 
                    338:             EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITPASTE, fEnable);
                    339: 
                    340:             break;
                    341: 
                    342:         default:
                    343:             break;
                    344:     }
                    345: 
                    346: }   /* InitMenu() */
                    347: 
                    348: /****************************************************************\
                    349:  *  Enables/Disables the menu item of the given menu
                    350:  *--------------------------------------------------------------
                    351:  *
                    352:  *  Name:   EnableMenuItem(hwndMenu, idItem, fEnable)
                    353:  *
                    354:  *  Purpose: Enables or disables the menu item
                    355:  *
                    356:  *  Usage:  Called whenever a menu item is to enabled or
                    357:  *          disabled
                    358:  *
                    359:  *  Method: Sends a MM_SETITEMATTR to the menu with the
                    360:  *          given item id.  Sets the MIA_DISABLED attribute
                    361:  *          flag if the item is to be disabled, clears the flag
                    362:  *          if enabling
                    363:  *
                    364:  *  Returns:
                    365:  *
                    366: \****************************************************************/
                    367: VOID EnableMenuItem(hwndMenu, idItem, fEnable)
                    368: HWND hwndMenu;      /* Handle to the menu */
                    369: SHORT idItem;       /* Id of the menu item to be enabled/disabled */
                    370: BOOL fEnable;       /* flag to set enable or disable bit */
                    371: {
                    372:     SHORT fsFlag;
                    373: 
                    374:     if(fEnable)
                    375:         fsFlag = 0;
                    376:     else
                    377:         fsFlag = MIA_DISABLED;
                    378: 
                    379:     WinSendMsg(hwndMenu,
                    380:                MM_SETITEMATTR,
                    381:                MPFROM2SHORT(idItem, TRUE),
                    382:                MPFROM2SHORT(MIA_DISABLED, fsFlag));
                    383: 
                    384: }   /* EnableMenuItem() */
                    385: 
                    386: /****************************************************************\
                    387:  *  Displays the Demonstration dialog selected
                    388:  *--------------------------------------------------------------
                    389:  *
                    390:  *  Name:   ShowDemoDlg(idMenuItem)
                    391:  *
                    392:  *  Purpose: Displays the demonstration dialog for the menu
                    393:  *           id chosen.
                    394:  *
                    395:  *  Usage:  Called whenever a menu item from the Dialog Box
                    396:  *          menu of the Demo menu is selected.
                    397:  *
                    398:  *  Method: Determines the id of the dialog template and
                    399:  *          creates a dialog of that template.
                    400:  *
                    401:  *  Returns:
                    402:  *
                    403: \****************************************************************/
                    404: VOID ShowDemoDlg(idMenuItem)
                    405: SHORT idMenuItem;   /* Id of the menu item chosen for the dialog */
                    406: {
                    407:     SHORT idDlg;
                    408: 
                    409:     switch(idMenuItem)  {
                    410:         case IDM_DEMODLGBUTTONS:
                    411:             idDlg = IDD_BUTTONSDLG;
                    412:             break;
                    413: 
                    414:         case IDM_DEMODLGLISTBOXES:
                    415:             idDlg = IDD_LISTBOXDLG;
                    416:             break;
                    417: 
                    418:         case IDM_DEMODLGCOMBOBOXES:
                    419:             idDlg = IDD_COMBOBOXDLG;
                    420:             break;
                    421: 
                    422:         case IDM_DEMODLGENTRYFIELDS:
                    423:             idDlg = IDD_ENTRYFIELDDLG;
                    424:             break;
                    425: 
                    426:         case IDM_DEMODLGSTATIC:
                    427:             idDlg = IDD_STATICDLG;
                    428:             break;
                    429: 
                    430:         default:    /* unknown menu id */
                    431:             return;
                    432:             break;
                    433:     }
                    434: 
                    435:     WinDlgBox(hwndMain,
                    436:               hwndMain,
                    437:               (PFNWP)DemoDlgProc, /* all demos use DemoDlgProc*/
                    438:               NULL,
                    439:               idDlg,              /* id of template */
                    440:               (PVOID)idDlg);      /* pass id as mp2 of WM_INITDLG */
                    441: 
                    442: }   /* ShowDemoDlg() */
                    443: 
                    444: 
                    445: /****************************************************************\
                    446:  *  Displays the Demonstration message box selected
                    447:  *--------------------------------------------------------------
                    448:  *
                    449:  *  Name:   ShowDemoMsgBox(idMenuItem)
                    450:  *
                    451:  *  Purpose: Displays the demonstration message box for the menu
                    452:  *           id chosen.
                    453:  *
                    454:  *  Usage:  Called whenever a menu item from the Message Box
                    455:  *          menu of the Demo menu is selected.
                    456:  *
                    457:  *  Method: Determines the options for the message box and then
                    458:  *          creates the box.
                    459:  *
                    460:  *  Returns:
                    461:  *
                    462: \****************************************************************/
                    463: VOID ShowDemoMsgBox(idMenuItem)
                    464: SHORT idMenuItem;   /* Id of the menu item chosen for the dialog */
                    465: {
                    466:     SHORT fsOptions, idText;
                    467:     CHAR szText[MESSAGELEN];
                    468: 
                    469:     switch(idMenuItem)  {
                    470:         case IDM_DEMOMSGBOXOK:
                    471:             fsOptions = MB_OK;
                    472:             idText = IDS_DEMOMSGBOXOK;
                    473:             break;
                    474: 
                    475:         case IDM_DEMOMSGBOXOKCANCEL:
                    476:             fsOptions = MB_OKCANCEL;
                    477:             idText = IDS_DEMOMSGBOXOKCANCEL;
                    478:             break;
                    479: 
                    480:         case IDM_DEMOMSGBOXYESNO:
                    481:             fsOptions = MB_YESNO;
                    482:             idText = IDS_DEMOMSGBOXYESNO;
                    483:             break;
                    484: 
                    485:         case IDM_DEMOMSGBOXYESNOCANCEL:
                    486:             fsOptions = MB_YESNOCANCEL;
                    487:             idText = IDS_DEMOMSGBOXYESNOCANCEL;
                    488:             break;
                    489: 
                    490:         case IDM_DEMOMSGBOXRETRYCANCEL:
                    491:             fsOptions = MB_RETRYCANCEL;
                    492:             idText = IDS_DEMOMSGBOXRETRYCANCEL;
                    493:             break;
                    494: 
                    495:         case IDM_DEMOMSGBOXABORT:
                    496:             fsOptions = MB_ABORTRETRYIGNORE;
                    497:             idText = IDS_DEMOMSGBOXABORT;
                    498:             break;
                    499: 
                    500:         case IDM_DEMOMSGBOXENTER:
                    501:             fsOptions = MB_ENTER;
                    502:             idText = IDS_DEMOMSGBOXENTER;
                    503:             break;
                    504: 
                    505:         case IDM_DEMOMSGBOXENTERCANCEL:
                    506:             fsOptions = MB_ENTERCANCEL;
                    507:             idText = IDS_DEMOMSGBOXENTERCANCEL;
                    508:             break;
                    509: 
                    510:         case IDM_DEMOMSGBOXQUERY:
                    511:             fsOptions = MB_OK | MB_QUERY;
                    512:             idText = IDS_DEMOMSGBOXQUERY;
                    513:             break;
                    514: 
                    515:         case IDM_DEMOMSGBOXWARNING:
                    516:             fsOptions = MB_OK | MB_WARNING;
                    517:             idText = IDS_DEMOMSGBOXWARNING;
                    518:             break;
                    519: 
                    520:         case IDM_DEMOMSGBOXINFO:
                    521:             fsOptions = MB_OK | MB_INFORMATION;
                    522:             idText = IDS_DEMOMSGBOXINFO;
                    523:             break;
                    524: 
                    525:         case IDM_DEMOMSGBOXCRITICAL:
                    526:             fsOptions = MB_OK | MB_CRITICAL;
                    527:             idText = IDS_DEMOMSGBOXCRITICAL;
                    528:             break;
                    529: 
                    530:         case IDM_DEMOMSGBOXAPP:
                    531:             fsOptions = MB_OK | MB_APPLMODAL;
                    532:             idText = IDS_DEMOMSGBOXAPP;
                    533:             break;
                    534: 
                    535:         case IDM_DEMOMSGBOXSYS:
                    536:             fsOptions = MB_OK | MB_SYSTEMMODAL;
                    537:             idText = IDS_DEMOMSGBOXSYS;
                    538:             break;
                    539: 
                    540:         case IDM_DEMOMSGBOXMOVEABLE:
                    541:             fsOptions = MB_OK | MB_MOVEABLE;
                    542:             idText = IDS_DEMOMSGBOXMOVEABLE;
                    543:             break;
                    544: 
                    545:         case IDM_DEMOMSGBOXHELP:
                    546:             fsOptions = MB_OK | MB_HELP;
                    547:             idText = IDS_DEMOMSGBOXHELP;
                    548:             break;
                    549: 
                    550:         default:    /* unknown menu id */
                    551:             return;
                    552:             break;
                    553:     }
                    554: 
                    555:     /* get the text for the message box */
                    556:     if(!WinLoadString(hab,
                    557:                       NULL,
                    558:                       idText,
                    559:                       MESSAGELEN,
                    560:                       (PSZ)szText))  {
                    561: 
                    562:         MessageBox(hwndMain,
                    563:                    IDMSG_CANNOTLOADSTRING,
                    564:                    MB_OK | MB_ERROR,
                    565:                    FALSE);
                    566:         return;
                    567:     }
                    568: 
                    569:     /* bring up the message box */
                    570:     WinMessageBox(HWND_DESKTOP,
                    571:                   hwndMain,
                    572:                   szText,
                    573:                   szAppName,
                    574:                   IDD_DEMOMSGBOX,
                    575:                   fsOptions);
                    576: 
                    577: 
                    578: }   /* ShowDemoMsgBox() */
                    579: 
                    580: 
                    581: 
                    582: /*--------------------------------------------------------------*\
                    583:  *  The following code is for the demonstration code only.  It
                    584:  *  should be removed when modifying this file for your
                    585:  *  application.
                    586: \*--------------------------------------------------------------*/
                    587: 
                    588: #ifdef PALETTE_DLG_ENABLED
                    589: 
                    590: /****************************************************************\
                    591:  *  Sets the foreground color of the application window
                    592:  *--------------------------------------------------------------
                    593:  *
                    594:  *  Name:   SetForegroundColor()
                    595:  *
                    596:  *  Purpose: Allows the user to select a color for the text
                    597:  *              displayed in the MLE
                    598:  *
                    599:  *  Usage:  Routine is called each time the user selects the
                    600:  *          Foreground Color menu item from the Options menu
                    601:  *
                    602:  *  Method: The standard color dialog is called with the
                    603:  *          default color table colors.  If the user selects
                    604:  *          one, then the MLM_SETTEXTCOLOR message is sent
                    605:  *          to the MLE to changed its text to the color chosen
                    606:  *
                    607:  *  Returns:
                    608:  *
                    609: \****************************************************************/
                    610: VOID SetForegroundColor(VOID)
                    611: {
                    612:     COLORDLG cd;
                    613:     HPS hps;
                    614:                                     
                    615:     /* Get the PS for the window */
                    616:     hps = WinGetPS(hwndMLE);
                    617:     if(!hps)  {
                    618:         MessageBox(hwnd, IDMSG_CANNOTGETHPS, TRUE);
                    619:         return;
                    620:     }
                    621: 
                    622:     /*  Initialize the COLORDLG structure */
                    623:     cd.kgd.cbSize      = sizeof(COLORDLG);
                    624:     cd.kgd.flStyle     = PGSS_CENTER;
                    625:     cd.kgd.pszDlgTitle = "Foreground Color";
                    626:     cd.kgd.pfnDlgProc  = NULL;
                    627:     cd.kgd.hmod        = NULL;
                    628:     cd.kgd.idDlg       = 0;
                    629:     cd.kgd.lReturn     = 0L;
                    630:     cd.kgd.x           = 0;
                    631:     cd.kgd.y           = 0;
                    632: 
                    633:     cd.pszButton    = "Ok";
                    634:     cd.fl           = CDS_STATICPALETTE | CDS_CENTER | CDS_HELPBUTTON;
                    635:     cd.pflFlags     = NULL;
                    636:     cd.iclrSel      = clrForeground;
                    637:     cd.cclrMax      = 0;
                    638:     cd.hps          = hps;
                    639:                             
                    640:     if(KitColorDlg(hwndMain, (PCOLORDLG)&cd) == (HWND)NULL)  {
                    641:         MessageBox(hwndMain, IDMSG_CANNOTRUNCOLORDLG, TRUE);
                    642:         WinReleasePS(hps);
                    643: 
                    644:         return (HWND)NULL;
                    645:     }
                    646: 
                    647:     /* set the foreground color to the returned value */
                    648:     WinSendMsg(hwndMLE, MLM_SETTEXTCOLOR, MPFROMLONG(cd.iclrSel), NULL);
                    649:     clrForeground = cd.iclrSel;
                    650: 
                    651:     WinReleasePS(hps);
                    652: 
                    653: }   /* SetForegroundColor() */
                    654: 
                    655: #endif  /* PALETTE_DLG_ENABLED */
                    656: 
                    657: /****************************************************************\
                    658:  *  Sets the background color of the given window
                    659:  *--------------------------------------------------------------
                    660:  *
                    661:  *  Name:   SetBackgroundColor(nMenuId)
                    662:  *
                    663:  *  Purpose: Allows the user to select a color for the window
                    664:  *              background
                    665:  *
                    666:  *  Usage:  Routine is called each time the user selects one
                    667:  *          of the Background colors listed in the Background
                    668:  *          Color submenu of the Options menu
                    669:  *
                    670:  *  Method: A switch statement determines which menu item was
                    671:  *          chosen and then the appropriate color is placed
                    672:  *          into clrBackground.
                    673:  *
                    674:  *  Returns:
                    675:  *
                    676: \****************************************************************/
                    677: VOID SetBackgroundColor(idMenu)
                    678: SHORT idMenu;       /* id of menu item selected */
                    679: {
                    680: 
                    681:     switch(idMenu)  {
                    682:         case IDM_OPTIONSBACKCOLORPINK:
                    683:             clrBackground = CLR_PINK;
                    684:             break;
                    685: 
                    686:         case IDM_OPTIONSBACKCOLORCYAN:
                    687:             clrBackground = CLR_CYAN;
                    688:             break;
                    689: 
                    690:         case IDM_OPTIONSBACKCOLORYELLOW:
                    691:             clrBackground = CLR_YELLOW;
                    692:             break;
                    693: 
                    694:         /*--------------------------------------------------------------*\
                    695:          *  For any others, including IDM_OPTIONSBACKCOLORDEFAULT, set
                    696:          *  the background color to the default back color
                    697:         \*--------------------------------------------------------------*/
                    698:         default:
                    699:             clrBackground = CLR_BACKGROUND;
                    700:             break;
                    701: 
                    702:     }
                    703: 
                    704:     WinSendMsg(hwndMLE, MLM_SETBACKCOLOR, MPFROMLONG(clrBackground), NULL);
                    705: 
                    706: }   /* SetBackgroundColor() */
                    707: 
                    708: #ifdef FONT_DLG_ENABLED
                    709: 
                    710: /****************************************************************\
                    711:  *  Sets the font of the MLE
                    712:  *--------------------------------------------------------------
                    713:  *
                    714:  *  Name:   SetFont()
                    715:  *
                    716:  *  Purpose: Allows the user to select a font for the text
                    717:  *              displayed in the MLE
                    718:  *
                    719:  *  Usage:  Routine is called each time the user selects the
                    720:  *          Font menu item from the Options menu
                    721:  *
                    722:  *  Method: The standard font dialog is called with the
                    723:  *          current available fonts.  If the user selects
                    724:  *          one, then the MLM_SETFONT message is sent to the
                    725:  *          MLE to display its text to the font chosen
                    726:  *
                    727:  *  Returns:
                    728:  *
                    729: \****************************************************************/
                    730: VOID SetFont(VOID)
                    731: {
                    732:     FONTDLG fntd;
                    733:     HPS hps;
                    734:     FONTMETRICS fm;
                    735:     CHAR szTitle[MESSAGELEN];
                    736: 
                    737:     /* get the current font attributes */
                    738:     hps = WinGetPS(hwndMLE);
                    739:     WinSendMsg(hwndMLE, MLM_QUERYFONT, MPFROMP((PFATTRS)&(fntd.fAttrs)), NULL);
                    740: 
                    741:     GpiCreateLogFont(hps, (PSTR8)NULL, 1L, &(fntd.fAttrs));
                    742:     GpiSetCharSet(hps, 1L);
                    743: 
                    744:     GpiQueryFontMetrics(hps, sizeof(FONTMETRICS), &fm);
                    745: 
                    746:     GpiSetCharSet(hps, LCID_DEFAULT);
                    747:     GpiDeleteSetId(hps, 1L);
                    748:     WinReleasePS(hps);
                    749: 
                    750:     /* Initialize the FONTDLG structure with the current font */
                    751:     fntd.cbSize     = sizeof(FONTDLG);
                    752:     fntd.hpsScreen  = WinGetScreenPS(HWND_DESKTOP);
                    753:     fntd.hpsPrinter = NULL;
                    754: 
                    755:     if(!WinLoadString(hab, NULL, IDS_FONTDLGTITLE, MESSAGELEN, szTitle))  {
                    756:         MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE);
                    757:         return;
                    758:     }
                    759:     fntd.pszTitle   = szTitle;
                    760: 
                    761:     fntd.pszPreview = NULL;
                    762:     fntd.pszPtSizeList = NULL;
                    763:     fntd.pfnDlgProc = NULL;
                    764:     strcpy(fntd.szFamilyname, fm.szFamilyname);
                    765:     fntd.fxPointSize  = MAKEFIXED(fm.sNominalPointSize, 0);
                    766:     fntd.fl         = FNTS_CENTER;
                    767:     fntd.flFlags      = NULL;
                    768:     fntd.flType       = NULL;
                    769:     fntd.flTypeMask   = NULL;
                    770:     fntd.flStyle      = NULL;
                    771:     fntd.flStyleMask  = NULL;
                    772:     fntd.flCHSOptions = 0L;
                    773:     fntd.flCHSMask    = 0L;
                    774:     fntd.clrFore      = clrForeground;
                    775:     fntd.clrBack      = clrBackground;
                    776:     fntd.lUser        = 0L;
                    777:     fntd.lReturn      = 0L;
                    778:     fntd.lEmHeight    = 0L;
                    779:     fntd.lXHeight     = 0L;
                    780:     fntd.lExternalLeading = 0L;
                    781:     fntd.sNominalPointSize = 0L;
                    782:     fntd.usWeight     = fm.usWeightClass;
                    783:     fntd.usWidth      = fm.usWidthClass;
                    784:     fntd.x          = 0;
                    785:     fntd.y          = 0;
                    786:     fntd.idDlg      = IDD_FONT;
                    787: 
                    788: 
                    789:     /* Bring up the standard Font Dialog */
                    790:     if(!KitFontDialog(hwndMLE, &fntd))  {
                    791:         WinReleasePS(fntd.hpsScreen);
                    792:         return;
                    793:     }
                    794: 
                    795:     WinReleasePS(fntd.hpsScreen);
                    796: 
                    797:     WinSendMsg(hwndMLE, MLM_SETFONT, MPFROMP(&(fntd.fAttrs)), NULL);
                    798: 
                    799:     /* Set the new colors */
                    800:     clrForeground = fntd.clrFore;
                    801:     clrBackground = fntd.clrBack;
                    802: 
                    803:     WinSendMsg(hwndMLE, MLM_SETTEXTCOLOR, MPFROMLONG(clrForeground), NULL);
                    804:     WinSendMsg(hwndMLE, MLM_SETBACKCOLOR, MPFROMLONG(clrBackground), NULL);
                    805: 
                    806: }   /* SetFont() */
                    807: 
                    808: #endif  /* FONT_DLG_ENABLED */
                    809: 
                    810: 
                    811: /*--------------------------------------------------------------*\
                    812:  *  End of demonstration code
                    813: \*--------------------------------------------------------------*/

unix.superglobalmegacorp.com

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