home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_01_06 / 1n06067a < prev    next >
Text File  |  1990-09-23  |  11KB  |  353 lines

  1. /**********************************************************
  2.  * SAMPLE.C
  3.  * Dialog Postprocessing Demonstration 
  4.  * (c) Stuart Browning,1990
  5.  */
  6.  
  7. #define LINT_ARGS
  8. #define NOMINMAX
  9.  
  10. #include <stdio.h>
  11. #include <windows.h>
  12. #include "sample.h"
  13.  
  14. HANDLE    hInst;             
  15.  
  16. long FAR PASCAL MainWindowProc(HWND,unsigned,WORD,LONG);
  17. BOOL FAR PASCAL MainDialogFunc(HWND,unsigned,WORD,LONG);
  18. BOOL FAR PASCAL PostProcessProc1(HWND,unsigned,WORD,LONG);
  19. BOOL FAR PASCAL PostProcessProc2(HWND,unsigned,WORD,LONG);
  20. BOOL FAR PASCAL About(HWND,unsigned,WORD,LONG);
  21.  
  22. /***********************************************************
  23.  * WinMain()
  24.  */
  25. int PASCAL WinMain(hInstance,hPrevInstance,lpCmdLine,nCmdShow)
  26.     HANDLE hInstance;
  27.     HANDLE hPrevInstance;
  28.     LPSTR  lpCmdLine;
  29.     int nCmdShow;
  30.     {
  31.     WNDCLASS WndClass;
  32.     HWND hWnd;
  33.     MSG msg;
  34.  
  35.     hInst=hInstance;                            
  36.     /*
  37.      * Register Main Window Class
  38.      */
  39.     if (!hPrevInstance){
  40.        WNDCLASS WndClass;
  41.        WndClass.lpszClassName = (LPSTR)"MainWindow";
  42.        WndClass.hInstance     = hInstance;
  43.        WndClass.lpfnWndProc   = MainWindowProc;
  44.        WndClass.style         = CS_HREDRAW|CS_VREDRAW;
  45.        WndClass.hbrBackground = CreateSolidBrush(
  46.                                   RGB(0xFF,0xFF,0x80));
  47.        WndClass.hIcon         = NULL;
  48.        WndClass.lpszMenuName  = (LPSTR)"MainMenu";
  49.        WndClass.hCursor       = LoadCursor(NULL,IDC_ARROW);
  50.        WndClass.cbClsExtra    = NULL;
  51.        WndClass.cbWndExtra    = NULL;
  52.        if (!RegisterClass(&WndClass))
  53.           return(NULL);
  54.        }
  55.     /*
  56.      * Create Main Window
  57.      */
  58.     hWnd=CreateWindow("MainWindow",            
  59.                       "Dialog Postprocessing Demonstration",    
  60.                       WS_OVERLAPPEDWINDOW, 
  61.                       CW_USEDEFAULT,       
  62.                       0,                   
  63.                       CW_USEDEFAULT,       
  64.                       0,                   
  65.                       NULL,                
  66.                       NULL,                
  67.                       hInstance,           
  68.                       NULL);               
  69.     if (!hWnd)
  70.       return(NULL);
  71.     /*
  72.      * Message Loop
  73.      */
  74.     while (GetMessage(&msg,NULL,0,0)){   
  75.        TranslateMessage(&msg);
  76.        DispatchMessage(&msg);
  77.        }
  78.     return (msg.wParam);
  79.     }
  80. /**********************************************************
  81.  * MainWindowProc()
  82.  */
  83. long FAR PASCAL MainWindowProc(hWnd,message,wParam,lParam)
  84.     HWND hWnd;
  85.     unsigned message;
  86.     WORD wParam;
  87.     LONG lParam;
  88.     {
  89.     switch (message){
  90.        case WM_CREATE:
  91.             ShowWindow(hWnd,SW_SHOWNORMAL);
  92.             UpdateWindow(hWnd);
  93.             break;
  94.        case WM_CLOSE:
  95.        case WM_ENDSESSION:
  96.             DestroyWindow(hWnd); 
  97.             break;
  98.        case WM_COMMAND:
  99.             switch(wParam){
  100.                 case IDM_ABOUT:
  101.                      DoDialogParam(hInst,
  102.                                    hWnd,
  103.                                    "ABOUT",
  104.                                    About,
  105.                                    0L);
  106.                      break;
  107.                 case IDM_EXIT:
  108.                      SendMessage(hWnd,WM_CLOSE,0,0L);
  109.                      break;
  110.                 case IDM_OPTION1:
  111.                      DoDialogParam(hInst,
  112.                                    hWnd,
  113.                                    "SAMPLEDLG",
  114.                                    MainDialogFunc,
  115.                                    0L);
  116.                      break;
  117.                 case IDM_OPTION2:
  118.                      DoDialogParam(hInst,
  119.                                    hWnd,
  120.                                    "SAMPLEDLG",
  121.                                    MainDialogFunc,
  122.                                    PostProcessProc1);
  123.                      break;
  124.                 case IDM_OPTION3:
  125.                      DoDialogParam(hInst,
  126.                                    hWnd,
  127.                                    "SAMPLEDLG",
  128.                                    MainDialogFunc,
  129.                                    PostProcessProc2);
  130.                      break;
  131.                 default:break;
  132.                 }
  133.             break;
  134.        case WM_DESTROY:
  135.             PostQuitMessage(0);
  136.             break;
  137.        default:return(DefWindowProc(hWnd,
  138.                                     message,
  139.                                     wParam,
  140.                                     lParam));
  141.        }
  142.     return(NULL);
  143.     }
  144. /**********************************************************
  145.  * DoDialogParam
  146.  */
  147. BOOL DoDialogParam(hInst,hWnd,Resource,lpProc,InitParm)
  148.     HANDLE hInst;
  149.     HWND hWnd;
  150.     char *Resource;
  151.     FARPROC lpProc;
  152.     DWORD InitParm;
  153.     {
  154.     FARPROC lpfn;
  155.     BOOL ReturnCode;
  156.     lpfn = MakeProcInstance(lpProc,hInst);
  157.     ReturnCode=DialogBoxParam(hInst,
  158.                               Resource,
  159.                               hWnd,
  160.                               lpfn,
  161.                               InitParm);
  162.     FreeProcInstance(lpfn);
  163.     return(ReturnCode);
  164.     }
  165. /**********************************************************
  166.  * MainDialogFunc
  167.  */
  168. BOOL FAR PASCAL MainDialogFunc(hDlg,message,wParam,lParam)
  169.     HWND hDlg;
  170.     unsigned message;
  171.     WORD wParam;
  172.     LONG lParam;
  173.     {
  174.     static FARPROC lpPostProcessProc;
  175.     switch (message){
  176.        case WM_INITDIALOG:   
  177.             SetWindowText(hDlg,
  178.                           "Main Dialog Function");
  179.             SetDlgItemText(hDlg,
  180.                            ID_LITERAL1,
  181.                            "Not much excitement here !");
  182.             /*
  183.              * Check lParam. If it is not NULL, store the
  184.              * pointer in a static FARPROC pointer.
  185.              */
  186.             if(lParam!=NULL)
  187.                lpPostProcessProc=MakeProcInstance(
  188.                                  (FARPROC)lParam,
  189.                                  hInst);
  190.             else
  191.                lpPostProcessProc=NULL;
  192.             /*
  193.              * If PostProcessProc pointer passed, call it
  194.              */
  195.             if(lpPostProcessProc!=NULL)
  196.                if ((BOOL)CallWindowProc(lpPostProcessProc,
  197.                                         hDlg,
  198.                                         message,
  199.                                         wParam,
  200.                                         lParam))
  201.                   break;
  202.             break;
  203.        case WM_MOVE:
  204.             /*
  205.              * If PostProcessProc pointer passed, call it
  206.              */
  207.             if(lpPostProcessProc!=NULL)
  208.                if ((BOOL)CallWindowProc(lpPostProcessProc,
  209.                                         hDlg,
  210.                                         message,
  211.                                         wParam,
  212.                                         lParam))
  213.                   break;
  214.             return(FALSE);
  215.        case WM_CLOSE:
  216.             SendMessage(hDlg,WM_COMMAND,ID_OK,0L); 
  217.             break;
  218.        case WM_COMMAND:
  219.             switch(wParam){
  220.                case ID_OK:
  221.                     /*
  222.                      * If PostProcessProc pointer passed, call it
  223.                      */
  224.                     if(lpPostProcessProc!=NULL)
  225.                        if ((BOOL)CallWindowProc(lpPostProcessProc,
  226.                                                 hDlg,
  227.                                                 message,
  228.                                                 wParam,
  229.                                                 lParam))
  230.                            break;
  231.                     if(lpPostProcessProc!=NULL)
  232.                        FreeProcInstance(lpPostProcessProc);
  233.                     EndDialog(hDlg,TRUE);
  234.                     break;
  235.                default:return(FALSE);
  236.                }
  237.             break;
  238.        default:return(FALSE);
  239.        }
  240.    return(TRUE);
  241.    }
  242. /**********************************************************
  243.  * PostProcessProc1
  244.  */
  245. BOOL FAR PASCAL PostProcessProc1(hDlg,message,wParam,lParam)
  246.    HWND hDlg;
  247.    unsigned message;
  248.    WORD wParam;
  249.    LONG lParam;
  250.    {
  251.    switch (message){
  252.       case WM_INITDIALOG:   
  253.            SetWindowText(hDlg,
  254.                          "PostProcessProc1 Override");
  255.            SetDlgItemText(hDlg,
  256.                           ID_LITERAL1,
  257.                           "Message:WM_INITDIALOG");
  258.            SetDlgItemText(hDlg,
  259.                           ID_LITERAL2,
  260.                           "Action:Changes caption");
  261.            return(TRUE);
  262.       case WM_COMMAND:
  263.            switch(wParam){
  264.               case ID_OK:
  265.                    SetDlgItemText(hDlg,
  266.                                   ID_LITERAL1,
  267.                                   "Message:WM_COMMAND");
  268.                    SetDlgItemText(hDlg,
  269.                                   ID_LITERAL2,
  270.                                   "Action:Confirms OK");
  271.                    if (MessageBox(hDlg,
  272.                                   "Are you Sure you wish to close ?",
  273.                                   "Confirm",
  274.                                    MB_OKCANCEL|MB_ICONQUESTION)
  275.                                    ==IDCANCEL)
  276.                       return(TRUE);
  277.                    else return(FALSE);
  278.               default:return(FALSE);
  279.               }
  280.            break;
  281.       default:return(FALSE);
  282.       }
  283.   return(TRUE);
  284.   }
  285. /**********************************************************
  286.  * PostProcessProc2
  287.  */
  288. BOOL FAR PASCAL PostProcessProc2(hDlg,message,wParam,lParam)
  289.    HWND hDlg;
  290.    unsigned message;
  291.    WORD wParam;
  292.    LONG lParam;
  293.    {
  294.    static RECT rc;
  295.    switch (message){
  296.       case WM_INITDIALOG:   
  297.            SetWindowText(hDlg,
  298.                          "PostProcessProc2 Override");
  299.            SetDlgItemText(hDlg,
  300.                           ID_LITERAL1,
  301.                           "Message:WM_INITDIALOG");
  302.            SetDlgItemText(hDlg,
  303.                           ID_LITERAL2,
  304.                           "Action:Changes caption");
  305.            GetWindowRect(hDlg,&rc);
  306.            return(TRUE);
  307.       case WM_MOVE:   
  308.            SetDlgItemText(hDlg,
  309.                           ID_LITERAL1,
  310.                           "Message:WM_MOVE:");
  311.            SetDlgItemText(hDlg,
  312.                           ID_LITERAL2,
  313.                           "Action:Please don't move me !");
  314.            MoveWindow(hDlg,
  315.                       rc.left,
  316.                       rc.top,
  317.                       rc.right-rc.left,
  318.                       rc.bottom-rc.top,
  319.                       TRUE);
  320.            return(TRUE);
  321.       default:return(FALSE);
  322.       }
  323.    return(TRUE);
  324.    }
  325. /**********************************************************
  326.  * About()
  327.  */
  328. BOOL FAR PASCAL About(hDlg,message,wParam,lParam)
  329.    HWND hDlg;
  330.    unsigned message;
  331.    WORD wParam;
  332.    LONG lParam;
  333.    {
  334.    switch (message){
  335.         case WM_CLOSE:
  336.              SendMessage(hDlg,WM_COMMAND,ID_OK,0L); 
  337.              break;
  338.         case WM_COMMAND:
  339.              switch(wParam){
  340.                 case ID_OK:
  341.                      EndDialog(hDlg,TRUE);
  342.                      break;
  343.                 default:return(FALSE);
  344.                 }
  345.              break;
  346.         default:return(FALSE);
  347.         }
  348.     return(TRUE);
  349.     }
  350.  
  351.  
  352.  
  353.