home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / CNRMNU.ZIP / CNRMENU.DOC < prev    next >
Text File  |  1993-03-27  |  6KB  |  122 lines

  1. CNRMENU.EXE is a sample program for container controls that builds on the
  2. CNRBASE.EXE sample program.
  3.  
  4. CNRBASE.EXE and its source code is downloadable from Compuserve (OS2DF1 forum,
  5. PM section) as CNRBAS.ZIP. It is a sample program that demonstrates setting up
  6. a container control and not much else.
  7.  
  8. CNRMENU takes CNRBASE a little further by demonstrating context menus, multiple
  9. instances of CNRBASE' directory window, multiple container controls sharing
  10. the same records, source emphasis, container sorting, and direct editing.
  11.  
  12. CNRMENU creates a standard window with a container as a child of the client
  13. window. Once created, the files found in a directory are inserted into the
  14. container and any subdirectories are traversed and inserted into the container
  15. in a tree format. This directory can be specified on the command line (i.e.
  16. 'CNRMENU path'). If not specified it defaults to the current directory.
  17.  
  18. A secondary thread is employed to fill the container since filling it could
  19. take a while depending on what directory was specified. This allows the user
  20. to interact with the container while it is being filled.
  21.  
  22. The Directory window uses DosFindFirst/DosFindNext to get a directory listing
  23. in order to populate the container. By using the context menu while over a
  24. subdirectory's icon or doubleclicking on a subdirectory's icon you can create
  25. another directory window that represents that subdirectory. When that window
  26. is created, its container uses the records from the first one so it doesn't
  27. need to do the FindFirst/FindNext. This is a capability of the container
  28. control (shared records). It substantially reduces memory requirements in a
  29. program that has multiple views of the same container or does something similar
  30. to CNRMENU.
  31.  
  32. The context menu changes depending on whether the mouse pointer is over a
  33. directory when the right mouse button is pressed.
  34.  
  35. This sample is not meant to demonstrate drag/drop, deltas, or ownerdraw. I do
  36. plan on uploading a program that demonstrates these (by building on CNRMENU) at
  37. a later date.
  38.  
  39. My coding style uses extensive error-checking. This, combined with the fact
  40. that this program gets rather involved, makes this a relatively difficult
  41. sample program to follow. I've tried to include as many comments as possible
  42. but admittedly you still may have problems following it. Please get ahold of
  43. me on Compuserve if you have questions.
  44.  
  45. CNRMENU.EXE is built from 7 source modules:
  46.  
  47. CNRMENU.C  - base code and client window procedure
  48. COMMON.C   - functions common to all modules
  49. CREATE.C   - code related to creating the directory windows
  50. CTXTMENU.C - code related to context menus
  51. EDIT.C     - code related to direct editing
  52. POPULATE.C - code related to populating the containers (separate thread)
  53. SORT.C     - code related to container sorting
  54.  
  55. The following displays the initialization of the container as it relates to
  56. the 4 source modules that make up CNRMENU.EXE initialization. The extern
  57. functions in the source modules are shown.
  58.  
  59.  
  60.   PRIMARY THREAD                           SECONDARY THREAD
  61.  
  62. ┌────────────────────┐                    ┌─────────────────────────────┐
  63. │           ┌────────┤                    │                             │
  64. │ CNRMENU.C │        │        (4)         │         POPULATE.C          │
  65. │   │  │    │       <─UM_CONTAINER_FILLED───────────                    │
  66. ││  │  │    │WinProc │                    │                             │
  67. ││  │  │    │        │                    │  ┌─> PopulateContainer()    │
  68. ││  │  │    │        │                    │  │                          │
  69. └│──│──│────┴────────┘                    └──│──────────│───────────────┘
  70.  │  │  │                                     │          │
  71.  │  │ (1)                                    │          │
  72.  │  │  │                                     │          │
  73.  │ (2) │                                     │          │
  74.  │  │  │                                     │          │
  75. ┌│──│──│────────────────────────┐            │          │
  76. ││  │  │                        │       _beginthread()  │
  77. ││  │  │    CREATE.C            │            │          │
  78. ││  │  │                        │            │          │
  79. ││  │  │                        │            │          │
  80. ││  │  └─> CreateDirectoryWin() │            │          │
  81. ││  │                           │            │          │
  82. ││  └─> CreateContainer() ────────────(3)────┘          │
  83. ││                              │                       │
  84. └│──────────────────────│───────┘                       │
  85.  │                      │                               │
  86.  │                   ┌──│───────────────────────────────│───┐
  87.  │                   │  v                               v   │
  88.  │                   │                                      │
  89.  │                   │              COMMON.C                │
  90.  └──────────────────────>                                   │
  91.                      │                                      │
  92.                      │     SetWindowTitle()                 │
  93.                      │     Msg()                            │
  94.                      │     FullyQualify()                   │
  95.                      │                                      │
  96.                      └──────────────────────────────────────┘
  97.  
  98.  
  99. (1) - Create the frame/client window.
  100. (2) - Create the container window as a child of the client.
  101. (3) - Start a thread that will fill the container with records.
  102. (4) - When the thread has filled the container, it posts a UM_CONTAINER_FILLED
  103.       message to the client window.
  104.  
  105.  
  106. Hope this sample program helps someone.
  107.  
  108. ===============================================================================
  109. GLOBAL HISTORY (KEPT SINCE 1/31/93 - Before that, kept on a per-module basis)
  110.  
  111. 3-27-93 - Changed PSZ szArg[] to char *argv[] in cnrmenu.c because of 3/93
  112.           compiler bug.
  113.  
  114. ===============================================================================
  115.  
  116. Rick Fishman
  117. Code Blazers, Inc.
  118. 4113 Apricot
  119. Irvine, CA 92720
  120.  
  121. CIS ID: 72251,750
  122.