home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / window / mewel12.lzh / LISTDEMO.C < prev    next >
C/C++ Source or Header  |  1989-06-28  |  6KB  |  236 lines

  1. /*
  2.   LISTDEMO.C 
  3.     A demonstration program which allows the user, through a dialog box,
  4.     to append, insert, and delete strings from a listbox.
  5. */
  6.  
  7. #include <stdio.h>
  8. #include "window.h"
  9. #include "keys.h"
  10.  
  11. #define ID_START      99
  12.  
  13. #define ID_STRING     100
  14. #define ID_POS        101
  15. #define ID_FRAME      102
  16. #define ID_APPEND     103
  17. #define ID_INSERT     104
  18. #define ID_DELETE     105
  19. #define ID_LISTBOX    106
  20.  
  21.  
  22. int  (pascal *OldMainWinProc)();
  23. extern int pascal MainWndProc();
  24. HWND hMain;
  25.  
  26.  
  27. main(argc, argv)
  28.   int  argc;
  29.   char **argv;
  30. {
  31.   EVENT  event;
  32.   HWND   hMenu, hPop;
  33.  
  34.   /*
  35.     Initialize the window system - this *must* be done once in every appl
  36.   */
  37.   WinInit();
  38.   /*
  39.     Create the main window and set the main window procedure
  40.   */
  41.   hMain = WinCreate(NULLHWND, 0, 0, 24, 79, "ListBox Demo", 0x17,
  42.                             (WIN_HAS_BORDER), NORMAL_CLASS, 0);
  43.   OldMainWinProc = WinSetWinProc(hMain, MainWndProc);
  44.  
  45.   /*
  46.     Create the menu bar and the single item - the DEMO START choice
  47.   */
  48.   hMenu = CreateMenu(hMain);
  49.   hPop = CreateMenu(hMenu);
  50.   ChangeMenu(hPop,  0, "~Start", ID_START,  MF_APPEND);
  51.   ChangeMenu(hMenu, 0, "~Demo",  hPop,      MF_POPUP | MF_APPEND);
  52.   SetMenu(hMain, hMenu);
  53.  
  54.   /*
  55.     Show the window
  56.   */
  57.   WinDraw(hMain);
  58.   SetFocus(hMain);
  59.  
  60.   /*
  61.     Main message loop
  62.   */
  63.   for (;;)
  64.   {
  65.     GetMessage(&event);
  66.     TranslateAccelerator(&event);
  67.     DispatchMessage(&event);
  68.   }
  69. }
  70.  
  71. /*
  72.   MainWndProc - window procedure for the main window
  73. */
  74. pascal MainWndProc(hWnd, message, wParam, lParam)
  75.   HWND hWnd;
  76.   WORD message;
  77.   WORD wParam;
  78.   DWORD lParam;
  79. {
  80.   switch (message)
  81.   {
  82.     case WM_COMMAND    :
  83.       /*
  84.         See if the user chose the START item from the DEMO menubar item
  85.       */
  86.       if (wParam == ID_START)
  87.         DoDialog();
  88.       break;
  89.  
  90.     case WM_QUIT       :
  91.       /* End the dialog editor */
  92.       VidClearScreen(0x07);
  93.       exit(0);
  94.  
  95.     default :
  96.       /* Call the default window procedure for the main window */
  97.       return DefWinProc(hWnd, message, wParam, lParam);
  98.   }
  99.  
  100.   return FALSE;
  101. }
  102.  
  103.  
  104. DoDialog()
  105. {
  106.   HDLG   hDlg;
  107.   extern BOOL pascal DialogProc();
  108.  
  109.   /*
  110.     Create the dialog box and the associated controls
  111.   */
  112.   hDlg = DialogCreate(hMain, 3,10,20,70, "Listbox Dialog", 0x31, 0x0000,
  113.                       DialogProc, 0);
  114.   DialogAddItem(hDlg, EditCreate(hDlg, 5, 12, 7, 37, "Enter String", 0x31,
  115.                             (WIN_HAS_BORDER), ID_STRING));
  116.   DialogAddItem(hDlg, EditCreate(hDlg, 10, 12, 12, 22, "Position", 0x31,
  117.                             (WIN_HAS_BORDER), ID_POS));
  118.   DialogAddItem(hDlg, StaticCreate(hDlg, 10,25,18,39, "Operation", 0x31, 
  119.                    STATIC_FRAME, ID_FRAME));
  120.   DialogAddItem(hDlg, RadioButtonCreate(hDlg, 12,27, "Append",
  121.                    0x31,0,ID_APPEND));
  122.   DialogAddItem(hDlg, RadioButtonCreate(hDlg, 14,27, "Insert",
  123.                    0x31,0,ID_INSERT));
  124.   DialogAddItem(hDlg, RadioButtonCreate(hDlg, 16,27, "Delete",
  125.                    0x31,0,ID_DELETE));
  126.   DialogAddItem(hDlg, ListBoxCreate(hDlg, 5,42,15,57, "Strings",
  127.                    0x31, LBS_STANDARD, ID_LISTBOX));
  128.   DialogAddItem(hDlg, PushButtonCreate(hDlg,18,42,"OK",0x31,0,IDOK));
  129.   DialogAddItem(hDlg, PushButtonCreate(hDlg,18,49,"QUIT",0x31,0,IDCANCEL));
  130.  
  131.   /*
  132.     Let the dialog box do its thing
  133.   */
  134.   DialogBox(hDlg);
  135. }
  136.  
  137.  
  138. BOOL pascal DialogProc(hDlg, message, wParam, lParam)
  139.   HWND hDlg;
  140.   WORD message;
  141.   WORD wParam;
  142.   DWORD lParam;
  143. {
  144.   char szString[80];
  145.   char szPos[30];
  146.   int  iPos;
  147.   int  operation;
  148.   int  iSel;
  149.   static char szItemText[80];
  150.   static int  nMovedItem = - 1;
  151.  
  152.   switch (message)
  153.   {
  154.     case WM_CHAR :
  155.       if (wParam == ALT_M && GetDlgItem(hDlg, ID_LISTBOX) == GetFocus())
  156.       {
  157.         if (nMovedItem < 0)
  158.         {
  159.           nMovedItem = SendDlgItemMessage(hDlg,ID_LISTBOX,LB_GETCURSEL,0,0L);
  160.           SendDlgItemMessage(hDlg, ID_LISTBOX, LB_GETTEXT,
  161.                              nMovedItem, (DWORD) (char far *) szItemText);
  162.         }
  163.         else
  164.           nMovedItem = -1;
  165.         return TRUE;
  166.       }
  167.       break;
  168.  
  169.     case WM_COMMAND    :
  170.       switch (wParam)
  171.       {
  172.           case IDOK      :
  173.           /*
  174.             The user pressed the OK button. We want to get the string
  175.             that is to be inserted as well as the position.
  176.           */
  177.           GetDialogText(hDlg, ID_STRING, (LPSTR) szString, sizeof(szString));
  178.           GetDialogInt(hDlg, ID_POS, &iPos);
  179.  
  180.           /*
  181.             Determine the operation to perform
  182.           */
  183.           operation = 0;
  184.           if (IsDialogButtonChecked(hDlg, ID_APPEND))
  185.             operation = LB_ADDSTRING;
  186.           else if (IsDialogButtonChecked(hDlg, ID_INSERT))
  187.             operation = LB_INSERTSTRING;
  188.           else if (IsDialogButtonChecked(hDlg, ID_DELETE))
  189.             operation = LB_DELETESTRING;
  190.  
  191.           if (operation)
  192.             SendDlgItemMessage(hDlg, ID_LISTBOX, operation, iPos,
  193.                                       (DWORD) (char far *) szString);
  194.           break;
  195.  
  196.         case IDCANCEL  :
  197.           /*
  198.              If the user pressed the QUIT button, then send a WM_QUIT
  199.              message to all the window procs
  200.           */
  201.           PostQuitMessage(0);
  202.           EndDialog(hDlg, 0);
  203.           break;
  204.  
  205.         case ID_APPEND :
  206.         case ID_DELETE :
  207.         case ID_INSERT :
  208.           /*
  209.             The user pressed a radio button. Enable this one and disable
  210.             the others
  211.           */
  212.           CheckRadioButton(hDlg, ID_APPEND, ID_DELETE, wParam);
  213.           break;
  214.  
  215.         case ID_LISTBOX :
  216.           switch (HIWORD(lParam))
  217.           {
  218.               case LBN_SELCHANGE :
  219.               if (nMovedItem < 0)
  220.                 return FALSE;
  221.               iSel = SendDlgItemMessage(hDlg,ID_LISTBOX,LB_GETCURSEL,0,0L);
  222.               SendDlgItemMessage(hDlg,ID_LISTBOX,LB_DELETESTRING,nMovedItem,0L);
  223.               SendDlgItemMessage(hDlg,ID_LISTBOX,LB_INSERTSTRING,iSel,
  224.                                  (DWORD) (char far *) szItemText);
  225.               nMovedItem = iSel;
  226.               break;
  227.           }
  228.           return FALSE;
  229.       }
  230.  
  231.       return TRUE;
  232.   }
  233.  
  234.   return FALSE;
  235. }
  236.