home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / v / vlistbox.zip / LISTTEST.C < prev    next >
C/C++ Source or Header  |  1993-01-19  |  12KB  |  365 lines

  1. #include "listtest.h"
  2.  
  3. HINSTANCE    hVlbLib;
  4.  
  5. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
  6. {
  7.  MSG        msg;           /* MSG structure to store your messages        */
  8.  int        nRc;           /* return value from Register Classes          */
  9.  
  10.  strcpy(szAppName, "LISTTEST");
  11.  hInst = hInstance;
  12.  
  13.  if(!hPrevInstance)
  14.    {
  15.     /* register window classes if first instance of application         */
  16.     if ((nRc = nCwRegisterClasses()) == -1)
  17.       {
  18.        /* registering one of the windows failed                         */
  19.        LoadString(hInst, IDS_ERR_REGISTER_CLASS, szString, sizeof(szString));
  20.        MessageBox(NULL, szString, NULL, MB_ICONEXCLAMATION);
  21.        return nRc;
  22.       }
  23.    }
  24.  
  25.  /* create application's Main window                                    */
  26.  hWndMain = CreateWindow(
  27.                 szAppName,               /* Window class name           */
  28.                 NULL,                   /* no title                     */
  29.                 WS_CAPTION      |        /* Title and Min/Max           */
  30.                 WS_SYSMENU      |        /* Add system menu box         */
  31.                 WS_MINIMIZEBOX  |        /* Add minimize box            */
  32.                 WS_MAXIMIZEBOX  |        /* Add maximize box            */
  33.                 WS_THICKFRAME   |        /* thick sizeable frame        */
  34.                 WS_CLIPCHILDREN |         /* don't draw in child windows areas */
  35.                 WS_OVERLAPPED,
  36.                 CW_USEDEFAULT, 0,        /* Use default X, Y            */
  37.                 CW_USEDEFAULT, 0,        /* Use default X, Y            */
  38.                 NULL,                    /* Parent window's handle      */
  39.                 NULL,                    /* Default to Class Menu       */
  40.                 hInst,                   /* Instance of window          */
  41.                 NULL);                   /* Create struct for WM_CREATE */
  42.  
  43.  
  44.  if(hWndMain == NULL)
  45.    {
  46.     LoadString(hInst, IDS_ERR_CREATE_WINDOW, szString, sizeof(szString));
  47.     MessageBox(NULL, szString, NULL, MB_ICONEXCLAMATION);
  48.     return IDS_ERR_CREATE_WINDOW;
  49.    }
  50.  
  51.  ShowWindow(hWndMain, nCmdShow);            /* display main window      */
  52.  
  53.  while(GetMessage(&msg, NULL, 0, 0))        /* Until WM_QUIT message    */
  54.    {
  55.     TranslateMessage(&msg);
  56.     DispatchMessage(&msg);
  57.    }
  58.  
  59.  /* Do clean up before exiting from the application                     */
  60.  CwUnRegisterClasses();
  61.  return msg.wParam;
  62. }
  63.  
  64.  
  65. LONG FAR PASCAL WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
  66. {
  67.  HMENU      hMenu=0;            /* handle for the menu                 */
  68.  int        nRc=0;              /* return code                         */
  69.  
  70.  switch (Message)
  71.    {
  72.     case WM_COMMAND:
  73.          switch (wParam)
  74.            {
  75.             case IDM_DIALOG:
  76.                  /* Place User Code to respond to the                   */
  77.                  /* Menu Item Named "Dialog" here.                      */
  78.  
  79.  
  80.                  {
  81.                   FARPROC lpfnDIALOGSMsgProc;
  82.  
  83.                   lpfnDIALOGSMsgProc = MakeProcInstance((FARPROC)DIALOGSMsgProc, hInst);
  84.                   nRc = DialogBox(hInst, MAKEINTRESOURCE(100), hWnd, lpfnDIALOGSMsgProc);
  85.                   FreeProcInstance(lpfnDIALOGSMsgProc);
  86.                  }
  87.                  break;
  88.  
  89.             default:
  90.                 return DefWindowProc(hWnd, Message, wParam, lParam);
  91.            }
  92.          break;        /* End of WM_COMMAND                             */
  93.  
  94.     case WM_CREATE:
  95.              hVlbLib = LoadLibrary("vlist.dll");
  96.          break;       /*  End of WM_CREATE                              */
  97.  
  98.     case WM_DESTROY:
  99.              FreeLibrary(hVlbLib);
  100.          break;
  101.  
  102.     case WM_CLOSE:  /* close the window                                 */
  103.          /* Destroy child windows, modeless dialogs, then, this window  */
  104.          DestroyWindow(hWnd);
  105.          if (hWnd == hWndMain)
  106.            PostQuitMessage(0);  /* Quit the application                 */
  107.         break;
  108.  
  109.     default:
  110.          return DefWindowProc(hWnd, Message, wParam, lParam);
  111.    }
  112.  return 0L;
  113. }
  114.  
  115.  
  116. BOOL FAR PASCAL DIALOGSMsgProc(HWND hWndDlg, UINT Message, WPARAM wParam, LPARAM lParam)
  117. {
  118.  HWND                   hwndList;
  119.  static char            szText[128];
  120.  LPVLBSTRUCT            lpvlbInStruct;
  121.  
  122.  switch(Message)
  123.    {
  124.     case WM_INITDIALOG:
  125.          cwCenter(hWndDlg, 0);
  126.          /* initialize working variables                                */
  127.          hwndList = GetDlgItem(hWndDlg, 101);
  128.          SendMessage(hwndList, VLB_INITIALIZE, 0, 0L);
  129.          SendMessage(hwndList, VLB_SETHORIZONTALEXTENT, 700, 0L);
  130.          break; /* End of WM_INITDIALOG                                 */
  131.  
  132.     case WM_CLOSE:
  133.          /* Closing the Dialog behaves the same as Cancel               */
  134.          PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L);
  135.          break; /* End of WM_CLOSE                                      */
  136.  
  137.     case WM_COMMAND:
  138.          switch(wParam)
  139.            {
  140.             case IDOK:
  141.                {
  142.                  VLBSTRUCT  vlbOutStruct;
  143.                  hwndList = GetDlgItem(hWndDlg, 101);
  144.                  vlbOutStruct.lIndex = SendMessage(hwndList, VLB_GETCURSEL, 0, 0L);
  145.                  vlbOutStruct.lpTextPointer = szText;
  146.                  SendMessage(hwndList, VLB_GETTEXT, 0, (LPARAM)(LPVLBSTRUCT)&vlbOutStruct);
  147.                  MessageBox(NULL, szText, "Current Item" , MB_OK);
  148.                  EndDialog(hWndDlg, FALSE);
  149.                }
  150.                  break;
  151.            }
  152.          break;    /* End of WM_COMMAND                                 */
  153.  
  154.     case VLB_PREV:
  155.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  156.  
  157.          if ( lpvlbInStruct->lIndex > 0 ) {
  158.             lpvlbInStruct->nStatus = VLB_OK;
  159.             lpvlbInStruct->lIndex--;
  160.             lpvlbInStruct->lData = lpvlbInStruct->lIndex;
  161.             sprintf(szText,"....%ld Item.......MMMMMMMMMMMMMMMMMMMMMmmmmmmmmmmmmmmmmmmmmmmm",lpvlbInStruct->lIndex);
  162.             lpvlbInStruct->lpTextPointer = szText;
  163.             return TRUE;
  164.          }
  165.          else {
  166.             lpvlbInStruct->nStatus = VLB_ENDOFFILE;
  167.             return TRUE;
  168.          }
  169.          break;
  170.  
  171.     case VLB_FINDPOS:
  172.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  173.  
  174.          if ( lpvlbInStruct->lIndex == 0L ) {
  175.             goto First;
  176.          }
  177.          else if ( lpvlbInStruct->lIndex == 100L ) {
  178.             goto Last;
  179.          }
  180.          else {
  181.             lpvlbInStruct->lIndex = lpvlbInStruct->lData*1000L;
  182.             lpvlbInStruct->nStatus = VLB_OK;
  183.             sprintf(szText,"....%ld Item.......MMMMMMMMMMMMMMMMMMMMMmmmmmmmmmmmmmmmmmmmmmmm",lpvlbInStruct->lIndex);
  184.             lpvlbInStruct->lpTextPointer = szText;
  185.             return TRUE;
  186.          }
  187.        break;
  188.  
  189.     case VLB_FINDITEM:
  190.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  191.  
  192.          lpvlbInStruct->lIndex = lpvlbInStruct->lData;
  193.          lpvlbInStruct->nStatus = VLB_OK;
  194.          sprintf(szText,"....%ld Item.......MMMMMMMMMMMMMMMMMMMMMmmmmmmmmmmmmmmmmmmmmmmm",lpvlbInStruct->lIndex);
  195.          lpvlbInStruct->lpTextPointer = szText;
  196.  
  197.          return TRUE;
  198.  
  199.        break;
  200.  
  201.     case VLB_FINDSTRING:
  202.     case VLB_FINDSTRINGEXACT:
  203.     case VLB_SELECTSTRING:
  204.     case VLBR_FINDSTRING:
  205.     case VLBR_FINDSTRINGEXACT:
  206.     case VLBR_SELECTSTRING:
  207.        {
  208.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  209.  
  210.          _fstrcpy(szText,lpvlbInStruct->lpFindString);
  211.          lpvlbInStruct->lIndex = atol(szText);
  212.          sprintf(szText,"....%ld Item.......MMMMMMMMMMMMMMMMMMMMMmmmmmmmmmmmmmmmmmmmmmmm",lpvlbInStruct->lIndex);
  213.          lpvlbInStruct->lpTextPointer = szText;
  214.          lpvlbInStruct->lData = lpvlbInStruct->lIndex;
  215.          lpvlbInStruct->nStatus = VLB_OK;
  216.          return TRUE;
  217.        }
  218.        break;
  219.  
  220.     case VLB_RANGE:
  221.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  222.  
  223.          lpvlbInStruct->lIndex = 100000L;
  224.          lpvlbInStruct->nStatus = VLB_OK;
  225.          return TRUE;
  226.  
  227.        break;
  228.  
  229.     case VLB_NEXT:
  230.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  231.  
  232.          if ( lpvlbInStruct->lIndex < 99999L ) {
  233.             lpvlbInStruct->nStatus = VLB_OK;
  234.             lpvlbInStruct->lIndex++;
  235.             lpvlbInStruct->lData = lpvlbInStruct->lIndex;
  236.             sprintf(szText,"....%ld Item.......MMMMMMMMMMMMMMMMMMMMMmmmmmmmmmmmmmmmmmmmmmmm",lpvlbInStruct->lIndex);
  237.             lpvlbInStruct->lpTextPointer = szText;
  238.             return TRUE;
  239.          }
  240.          else {
  241.             lpvlbInStruct->nStatus = VLB_ENDOFFILE;
  242.             return TRUE;
  243.          }
  244.        break;
  245.  
  246.     case VLB_FIRST:
  247. First:
  248.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  249.  
  250.          lpvlbInStruct->nStatus = VLB_OK;
  251.          lpvlbInStruct->lIndex = 0L;
  252.          sprintf(szText,"....%ld Item.......MMMMMMMMMMMMMMMMMMMMMmmmmmmmmmmmmmmmmmmmmmmm",lpvlbInStruct->lIndex);
  253.          lpvlbInStruct->lpTextPointer = szText;
  254.          lpvlbInStruct->lData = lpvlbInStruct->lIndex;
  255.          return TRUE;
  256.  
  257.     case VLB_LAST:
  258. Last:
  259.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  260.  
  261.          lpvlbInStruct->nStatus = VLB_OK;
  262.          lpvlbInStruct->lIndex = 99999L;
  263.          sprintf(szText,"....%ld Item.......MMMMMMMMMMMMMMMMMMMMMmmmmmmmmmmmmmmmmmmmmmmm",lpvlbInStruct->lIndex);
  264.          lpvlbInStruct->lpTextPointer = szText;
  265.          lpvlbInStruct->lData = lpvlbInStruct->lIndex;
  266.          return TRUE;
  267.  
  268.        break;
  269.  
  270.     case VLB_GETITEMDATA:
  271.     case VLBR_GETITEMDATA:
  272.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  273.  
  274.          lpvlbInStruct->nStatus = VLB_OK;
  275.          lpvlbInStruct->lData = lpvlbInStruct->lIndex;
  276.          return TRUE;
  277.        break;
  278.  
  279.     case VLB_GETTEXT:
  280.     case VLBR_GETTEXT:
  281.          lpvlbInStruct = (LPVLBSTRUCT)lParam;
  282.  
  283.          lpvlbInStruct->nStatus = VLB_OK;
  284.          lpvlbInStruct->lData = lpvlbInStruct->lIndex;
  285.          sprintf(szText,"....%ld Item.......MMMMMMMMMMMMMMMMMMMMMmmmmmmmmmmmmmmmmmmmmmmm",lpvlbInStruct->lIndex);
  286.          lpvlbInStruct->lpTextPointer = szText;
  287.          return TRUE;
  288.        break;
  289.  
  290.     default:
  291.         return FALSE;
  292.    }
  293.  return TRUE;
  294. }
  295.  
  296.  
  297. int nCwRegisterClasses(void)
  298. {
  299.  WNDCLASS   wndclass;    /* struct to define a window class             */
  300.  memset(&wndclass, 0x00, sizeof(WNDCLASS));
  301.  
  302.  
  303.  /* load WNDCLASS with window's characteristics                         */
  304.  wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_BYTEALIGNWINDOW;
  305.  wndclass.lpfnWndProc = WndProc;
  306.  /* Extra storage for Class and Window objects                          */
  307.  wndclass.cbClsExtra = 0;
  308.  wndclass.cbWndExtra = 0;
  309.  wndclass.hInstance = hInst;
  310.  wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  311.  wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  312.  /* Create brush for erasing background                                 */
  313.  wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  314.  wndclass.lpszMenuName = szAppName;   /* Menu Name is App Name */
  315.  wndclass.lpszClassName = szAppName; /* Class Name is App Name */
  316.  if(!RegisterClass(&wndclass))
  317.    return -1;
  318.  
  319.  
  320.  return(0);
  321. }
  322.  
  323. void cwCenter(hWnd, top)
  324. HWND hWnd;
  325. int top;
  326. {
  327.  POINT      pt;
  328.  RECT       swp;
  329.  RECT       rParent;
  330.  int        iwidth;
  331.  int        iheight;
  332.  
  333.  /* get the rectangles for the parent and the child                     */
  334.  GetWindowRect(hWnd, &swp);
  335.  GetClientRect(hWndMain, &rParent);
  336.  
  337.  /* calculate the height and width for MoveWindow                       */
  338.  iwidth = swp.right - swp.left;
  339.  iheight = swp.bottom - swp.top;
  340.  
  341.  /* find the center point and convert to screen coordinates             */
  342.  pt.x = (rParent.right - rParent.left) / 2;
  343.  pt.y = (rParent.bottom - rParent.top) / 2;
  344.  ClientToScreen(hWndMain, &pt);
  345.  
  346.  /* calculate the new x, y starting point                               */
  347.  pt.x = pt.x - (iwidth / 2);
  348.  pt.y = pt.y - (iheight / 2);
  349.  
  350.  /* top will adjust the window position, up or down                     */
  351.  if(top)
  352.    pt.y = pt.y + top;
  353.  
  354.  /* move the window                                                     */
  355.  MoveWindow(hWnd, pt.x, pt.y, iwidth, iheight, FALSE);
  356. }
  357.  
  358. void CwUnRegisterClasses(void)
  359. {
  360.  WNDCLASS   wndclass;    /* struct to define a window class             */
  361.  memset(&wndclass, 0x00, sizeof(WNDCLASS));
  362.  
  363.  UnregisterClass(szAppName, hInst);
  364. }
  365.