home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / SOUR / CGAZ5N2.ZIP / DEMO.C < prev    next >
C/C++ Source or Header  |  1990-12-09  |  14KB  |  306 lines

  1. /********************************************************************
  2. ** File:        DEMO.C
  3. ** Purpose:     Dialog Box Demo
  4. ** Author:      Michael Young
  5. ** Compiler:    Microsoft C 6.0
  6. ** Environment: Windows 3.0
  7. *********************************************************************/
  8.  
  9. #define _WINDOWS
  10. #include <windows.h>
  11. #include <string.h>
  12. #include "demo.h"
  13. #include "demodlg.h"
  14.  
  15. BOOL InitInstance (HANDLE hInstance, int nCmdShow);
  16. BOOL InitProgram (HANDLE hInstance);
  17. long FAR PASCAL MainWndProc (HWND hwnd, unsigned message, WORD wParam,
  18.      LONG lParam);
  19. BOOL FAR PASCAL AboutDlgProc (HWND hDlg, unsigned message, WORD wParam,
  20.     LONG lParam);
  21. BOOL FAR PASCAL SettingsDlgProc (HWND hDlg, unsigned message, WORD wParam,
  22.     LONG lParam);
  23.  
  24. HANDLE HInst;                       /* Handle to current program instance.  */
  25. struct {                            /* Holds current modem settings.        */
  26.     char Port [5];                  /* COMx                                 */
  27.     char DialType;                  /* 'T' or 'P'                           */
  28.     char Prefix [7];                /* 0-6 numbers, or ',' for 2-sec. pause */
  29.     }
  30.     Header = { "COM1", 'T', "" };   /* default settings                     */
  31.  
  32. int PASCAL WinMain          /* Program entry function.                      */
  33.      (HANDLE hInstance,     /* Handle to current program instance.          */
  34.      HANDLE hPrevInstance,  /* Handle to previous program instance.         */
  35.      LPSTR lpCmdLine,       /* Pointer to command line.                     */
  36.      int nCmdShow)          /* Indicates how to show window (open/icon).    */
  37. {
  38.     MSG Msg;                /* Structure for holding messages.              */
  39.  
  40.     if (!hPrevInstance)                 /* Check for other program instances*/
  41.         if (!InitProgram (hInstance))   /* Initialize program.              */
  42.             return (FALSE);             /* Can't initialize; exit.          */
  43.  
  44.     if (!InitInstance (hInstance, nCmdShow))    /* Initialize instance.     */
  45.         return (FALSE);                         /* Can't initialize; exit.  */
  46.  
  47.     while (GetMessage           /* Get messages from the program queue      */
  48.                                 /*      until receiving WM_QUIT.            */
  49.         (&Msg,                  /* Address of message structure.            */
  50.         NULL,                   /* Window to receive messages: NULL = all.  */
  51.         NULL,                   /* Lowest message value: none.              */
  52.         NULL))                  /* Highest message value: none.             */
  53.     {
  54.         TranslateMessage (&Msg);
  55.         DispatchMessage (&Msg); /* Sends message to window procedure.       */
  56.     }
  57.  
  58.     return (Msg.wParam);        /* Return value supplied by WM_QUIT.        */
  59.  
  60. }   /* end WinMain */
  61.  
  62.  
  63. BOOL InitInstance       /* Instance initialization function.                */
  64.     (HANDLE hInstance,  /* Current program instance.                        */
  65.     int hCmdShow)       /* Indicates how to show window (open/icon).        */
  66. {
  67.     HWND HWindow;       /* Handle for main program window.                  */
  68.  
  69.     HInst = hInstance;  /* Save instance handle in global variable.         */
  70.  
  71.     HWindow = CreateWindow      /* Create the main program window.          */
  72.         ("DemoClass",           /* Class name passed to RegisterClass.      */
  73.         "Dialog Demo Program",  /* Text for window title.                   */
  74.                                 /* Window style:                            */
  75.         WS_OVERLAPPEDWINDOW,    /* Has title, system menu, & border.        */
  76.         CW_USEDEFAULT,          /* Horizontal position: use default.        */
  77.         CW_USEDEFAULT,          /* Vertical position: use default.          */
  78.         CW_USEDEFAULT,          /* Width: use default.                      */
  79.         CW_USEDEFAULT,          /* Height: use default.                     */
  80.         NULL,                   /* Parent: none.                            */
  81.         NULL,                   /* Menu: use class menu.                    */
  82.         hInstance,              /* Instance to be associated with window.   */
  83.         NULL);                  /* Pointer value passed to window: none.    */
  84.  
  85.     if (!HWindow)       /* 0 window handle = window could not be created.   */
  86.         return (FALSE); /* FALSE indicates failure. */
  87.  
  88.     ShowWindow                  /* Display the window.                      */
  89.         (HWindow,               /* Window handle.                           */
  90.         hCmdShow);              /* Display mode (open/icon).                */
  91.     UpdateWindow (HWindow);     /* Causes window proc. to update window.    */
  92.  
  93.     return (TRUE);              /* TRUE indicates success.                  */
  94.  
  95. }   /* end InitInstance */
  96.  
  97.  
  98. BOOL InitProgram                /* Program initialization function.         */
  99.     (HANDLE hInstance)          /* Current program instance.                */
  100. {
  101.     WNDCLASS WC;                /* Structure for holding class information. */
  102.  
  103.     WC.style = CS_DBLCLKS;                      /* Double-click processing. */         
  104.     WC.lpfnWndProc = MainWndProc;               /* Window function.         */                        
  105.     WC.cbClsExtra = 0;                          /* No extra data for class. */             
  106.     WC.cbWndExtra = 0;                          /* "    "    "   " instance */          
  107.     WC.hInstance = hInstance;                   /* Instance that owns class.*/        
  108.     WC.hIcon = LoadIcon (NULL, IDI_APPLICATION);/* Load/assign class icon.  */                  
  109.     WC.hCursor = LoadCursor (NULL, IDC_ARROW);  /* Load/assign cl. cursor.  */                  
  110.     WC.hbrBackground = GetStockObject (WHITE_BRUSH); /* Background brush.   */
  111.     WC.lpszMenuName = "DemoMenu";                    /* Name of class menu. */
  112.     WC.lpszClassName = "DemoClass";                  /* Name of window class*/
  113.     return (RegisterClass (&WC));                    /* Register window     */
  114.                                                      /*   class/return code.*/
  115.  
  116. }   /* end InitProgram */
  117.  
  118.  
  119. long FAR PASCAL MainWndProc            /* Window procedure for main window. */
  120.      (HWND hwnd,                       /* Window handle.                    */
  121.      unsigned message,                 /* Message type.                     */
  122.      WORD wParam,                      /* Message information.              */
  123.      LONG lParam)                      /* More message information.         */
  124. {
  125.     HDC HDspCtx;                       /* Handle to display context.        */
  126.     PAINTSTRUCT PS;                    /* Paint data structure.             */
  127.     RECT Rect;                         /* Rectangle data structure.         */
  128.  
  129.     FARPROC ProcAddr;    /* Holds procedure-instance address of dialog proc.*/
  130.  
  131.     switch (message) 
  132.     {                                 /* Branch according to message.       */
  133.       case WM_COMMAND:                /* Menu item chosen.                  */
  134.         switch (wParam)               /* Branch on menu item identifier.    */
  135.         {
  136.           case IDM_ABOUT:                   /* "About" menu item chosen.    */
  137.             ProcAddr = MakeProcInstance (AboutDlgProc, HInst);
  138.             DialogBox                       /* Open "About" dialog box.     */
  139.                 (HInst,                     /* Current instance.            */
  140.                 "ABOUTDLG",                 /* Name of resource.            */
  141.                 hwnd,                       /* Handle of parent window.     */
  142.                 ProcAddr);                  /* Procedure instance address.  */
  143.             FreeProcInstance (ProcAddr);    /* Free address.                */
  144.             return (NULL);
  145.  
  146.           case IDM_SETTINGS:                /* "Settings" menu item chosen. */
  147.             ProcAddr = MakeProcInstance (SettingsDlgProc, HInst);
  148.             DialogBox                       /* Open "Settings" dialog box.  */
  149.                 (HInst,                     /* Current instance.            */
  150.                 "SETTINGSDLG",              /* Name of resource.            */
  151.                 hwnd,                       /* Handle of parent window.     */
  152.                 ProcAddr);                  /* Procedure instance address.  */
  153.             FreeProcInstance (ProcAddr);    /* Free address.                */
  154.             return (NULL);
  155.  
  156.           case IDM_EXIT:                    /* "Exit" menu item chosen.     */
  157.             DestroyWindow (hwnd);           /* Destroy main window.         */
  158.             return (NULL);
  159.  
  160.           default:
  161.             return (DefWindowProc (hwnd, message, wParam, lParam));
  162.         }
  163.  
  164.       case WM_DESTROY:                     /* Window is being destroyed.    */
  165.         PostQuitMessage (0);               /* Posts a WM_QUIT message to    */
  166.                                            /* program queue.                */
  167.         return (NULL);
  168.  
  169.       default:  /* Have Windows do default processing on all */
  170.                 /* other messages: */
  171.         return (DefWindowProc (hwnd, message, wParam, lParam));
  172.  
  173.     }   /* end switch */
  174.  
  175. }   /* end MainWndProc */
  176.  
  177.  
  178. BOOL FAR PASCAL AboutDlgProc               /* "About" dialog procedure.     */
  179.     (HWND hDlg,                            /* Window handle for dialog box. */
  180.     unsigned message,                      /* Message type.                 */
  181.     WORD wParam,                           /* Message information.          */
  182.     LONG lParam)                           /* More message information.     */
  183. {
  184.     switch (message) 
  185.     {
  186.       case WM_INITDIALOG:              /* Dialog box is being initialized.  */
  187.         return (TRUE);                 /* TRUE indicates message processed. */
  188.  
  189.       case WM_COMMAND:                     /* Command sent from dialog box. */
  190.                                            /* User clicked OK, hit Esc, 
  191.                                                  or closed thru systm menu: */
  192.         if (wParam == IDOK || wParam == IDCANCEL) 
  193.         {
  194.             EndDialog (hDlg, TRUE); /* Remove dialog box. */
  195.             return (TRUE);
  196.         }
  197.         else
  198.             return (FALSE);                /* FALSE: message not processed. */
  199.  
  200.       default:
  201.         return (FALSE);
  202.  
  203.     }   /* end switch */
  204.  
  205. }   /* end AboutDlgProc */
  206.  
  207.  
  208. BOOL FAR PASCAL SettingsDlgProc
  209.     (HWND hDlg,
  210.     unsigned message,
  211.     WORD wParam,
  212.     LONG lParam)
  213. {
  214.     int ControlID;
  215.  
  216.     switch (message) 
  217.     {
  218.       case WM_INITDIALOG:
  219.         SendDlgItemMessage  /* Limit number of characters that  */
  220.             (hDlg,          /* can be entered into edit control. */
  221.             IDC_EDIT,
  222.             EM_LIMITTEXT,
  223.             6,
  224.             NULL);
  225.  
  226.         SendDlgItemMessage  /* Assign current value of 'Prefix' */
  227.             (hDlg,          /* to edit control. */
  228.             IDC_EDIT,
  229.             WM_SETTEXT,
  230.             NULL,
  231.             (DWORD)(char far *)Header.Prefix);
  232.  
  233.         if (Header.DialType == 'T')         /* Check radio button in 'Dial  */
  234.             ControlID = IDC_TONE;           /* Type' group corresponding to */
  235.         else                                /* current setting.             */
  236.             ControlID = IDC_PULSE;
  237.         SendDlgItemMessage
  238.             (hDlg,
  239.             ControlID,
  240.             BM_SETCHECK,
  241.             1,
  242.             NULL);
  243.  
  244.         if (strcmp (Header.Port, "COM1") == 0)        /* Check button in    */
  245.             ControlID = IDC_COM1;                     /* 'Port' group       */
  246.         else if (strcmp (Header.Port, "COM2") == 0)   /* for current        */
  247.             ControlID = IDC_COM2;                     /* setting.           */
  248.         else if (strcmp (Header.Port, "COM3") == 0)
  249.             ControlID = IDC_COM3;
  250.         else
  251.             ControlID = IDC_COM4;
  252.         SendDlgItemMessage
  253.             (hDlg,
  254.             ControlID,
  255.             BM_SETCHECK,
  256.             1,
  257.             NULL);
  258.         return (TRUE);
  259.  
  260.       case WM_COMMAND:
  261.         switch (wParam) 
  262.         {
  263.           case IDOK:                        /* User clicked OK button.      */
  264.             SendDlgItemMessage              /* Get selected 'Prefix' value. */
  265.                 (hDlg,
  266.                 IDC_EDIT,
  267.                 WM_GETTEXT,
  268.                 sizeof (Header.Prefix),
  269.                 (DWORD)(char far *)Header.Prefix);
  270.  
  271.             /* Get selected dial type value: */
  272.             if (SendDlgItemMessage (hDlg, IDC_TONE, BM_GETCHECK,
  273.                 NULL, NULL))
  274.                 Header.DialType = 'T';
  275.             else
  276.                 Header.DialType = 'P';
  277.  
  278.             /* Get selected port value: */
  279.             if (SendDlgItemMessage (hDlg, IDC_COM1, BM_GETCHECK,
  280.                 NULL, NULL))
  281.                 strcpy (Header.Port,"COM1");
  282.             else if (SendDlgItemMessage (hDlg, IDC_COM2, BM_GETCHECK,
  283.                 NULL, NULL))
  284.                 strcpy (Header.Port,"COM2");
  285.             else if (SendDlgItemMessage (hDlg, IDC_COM3, BM_GETCHECK,
  286.                 NULL, NULL))
  287.                 strcpy (Header.Port,"COM3");
  288.             else
  289.                 strcpy (Header.Port,"COM4");
  290.             EndDialog (hDlg, TRUE);         /* Remove dialog box.           */
  291.             return (TRUE);
  292.  
  293.           case IDCANCEL:                    /* User clicked 'Cancel' button */
  294.                                             /*     or hit Escape.           */
  295.             EndDialog (hDlg, TRUE);         /* Remove dialog box.           */
  296.             return (TRUE);
  297.  
  298.           default:
  299.             return (FALSE);                /* Dialog message NOT processed. */
  300.         }
  301.       default:
  302.         return (FALSE);                    /* Dialog message NOT processed. */
  303.  
  304.     }   /* end switch */
  305.  
  306. }   /* end SettingsDlgProc */