Dec 132017
Borland C++ OWL MDI class that supports status line, toolbar, and toolbox.
File LCKOWL.ZIP from The Programmer’s Corner in
Category C++ Source Code
Borland C++ OWL MDI class that supports status line, toolbar, and toolbox.
File Name File Size Zip Size Zip Type
GENMDIX.CPP 3638 868 deflated
GENMDIX.DEF 118 92 deflated
GENMDIX.DSK 2330 1064 deflated
GENMDIX.EXE 18432 4819 deflated
GENMDIX.H 842 368 deflated
GENMDIX.MAP 26296 3516 deflated
GENMDIX.OBJ 16413 5756 deflated
GENMDIX.PRJ 9929 1470 deflated
GENMDIX.RC 9156 1123 deflated
GENMDIX.RES 2938 659 deflated
GENMDIX2.H 71 43 deflated
GENMDIX3.H 5156 1203 deflated
LCKOWL.CPP 9576 2483 deflated
LCKOWL.DEF 113 90 deflated
LCKOWL.DLL 13792 4941 deflated
LCKOWL.DSK 2695 1185 deflated
LCKOWL.H 5131 1466 deflated
LCKOWL.LIB 16384 1140 deflated
LCKOWL.OBJ 17224 6178 deflated
LCKOWL.PRJ 7721 1415 deflated
LCKOWL2.H 363 131 deflated
LCKUTIL.DLL 10752 3363 deflated
README.TXT 12655 4626 deflated
TBPRO1.DLL 136304 57056 deflated
TBPRO5.DLL 66480 28802 deflated

Download File LCKOWL.ZIP Here

Contents of the README.TXT file


Company Information:

Larry Klein
LCK Consulting
732 Symphony Woods Drive
Silver Spring, MD 20901
Phone: 301-593-2745
Fax: 301-593-4262


LCKOWL is a subset of a larger set of tools that were
written to simplify managing windows that have more than
just the basic Microsoft Windows components. In this
release, LCKOWL includes an MDI Frame class that is derived
from TMDIFrame that automatically manages a status bar, a
toolbar and a toolbox. The status bar, toolbar and toolbox
controls are based on Drover's Professional Toolbox
controls. What LCKOWL adds is the client area and menu
management functions that will hopefully enable new users to
get up and running within an hour and have all
the capabilities of professional-looking software. Also,
LCKOWL.DLL shields the user from having to learn the details
of using Drover's Toolbox.

NOTE: Though you can use LCKOWL.DLL as-is, including
deriving classes of your own, having Drover's Toolbox
documentation and software will enable you to customize
LCKOWL.DLL to your own specifications.

Drover's Toolbox can be purchased from FarPoint Technologies
or from any number of software vendors that specialize in
software for developers. FarPoint can be reached at (614)
765-4333. If you call FarPoint, please let Tamara Calaway
(Director of Marketing) know that I referred you, and
if there is enough of a response I might be able to get them
to agree that I include more of Drover's toolkit on a review
basis in my next version.

NOTE: There are other toolkits available for the types of
controls that I implemented. Because of the way in which
the classes are set up, it should be fairly easy for someone
to exchange Drover's Toolbox for another vendor's set of


Copy the enclosed .ZIP file to a first-level directory and
unzip. If this has already been unzipped and is not in a
first-level directory, copy the files into a first-level

WINDOWS SYSTEM (typically \windows\system\) DIRECTORY. IF

NOTE: If the files are not in a first level directory, the
project will have to be edited so that the references to the
project files match the directories in which they are

NOTE: If Borland's C++ files were not installed in the
default \borlandc\ directory, you will have to update the
Options | Directories so that the header and library files
point to the correct locations.

Quick Explanation

To start, I suggest you first run the enclosed GENMDIX.EXE
application. It contains the features that demonstrate the
functionality available in LCKOWL.DLL. GENMDIX.EXE also
serves as a shell MDI application, and can therefore be used
as a basis for creating an OWL-based MDI application with
status bar, toolbar and toolbox.

Description of Menu Options in GENMDIX.EXE

File | Next - Creates a new child window. The
purpose of this function is to see how the
window moves within the client area when the
statusbar and toolbar are turned on and off.

File | Enter Status Bar Text - Accepts any character
string that will be displayed in the first
status bar field.

File | Enter Status Bar Progress - Accepts any
numeric value that will show as a percentage
progress on the second status bar field.

Options | Create... - Creates appropriate control

Options | Destroy... - Destroys appropriate control

Options | Toggle... - Toggles appropriate control

Windows... - Standard MDI windows routines

Explanation of GENMDIX.EXE Functions

OWL has certain menu IDs that are reserved so that OWL can
automatically manage certain functions, without the
developer having to code anything. For example,
CM_CASCADECHILDREN automatically cascades child MDI windows
without having to code a line in the header or source file.
Simply add this as a menu option, derive your MDI window
from TMDIFrame and OWL will take care of cascading children.
(NOTE: You must add OWLRC.H to your source so that the
Resource Workshop will recognize these menu IDs).

Similarly, LCKOWL has several menu options that
automatically manage status bar, toolbar and toolbox
functionality. To get these menu IDs to work in your
resource (.RC) file, add the header file LCKOWL2.H to your
resource (File | Add To Project from the Resource Workshop
menu). By deriving your MDI window from TMDIFrameTools
(which is itself derived from TMDIFrame), the following menu
IDs will automatically work:


Explanation of Tying Buttons to Menu Commands

This is automatic, so long as the ID used for a button is
the same as the ID for a menu option. This relieves the
programmer from any extra coding. In GENMDIX.EXE, I used
BM1 to represent the File | Enter Status Bar Text, and BM2
to represent File | Enter Status Bar Progress. The only
requirement was that BM1 and BM2 have the same ID as the
menu options they represent. You set the ID of a button in
the source file when creating the structure that represents
the toolbar and toolbox. GENMDIX.CPP is an example.

Brief Technical Directions on Using LCKOWL.DLL

1. Add the header file GENMDIX3.H to your source
file. The reason this is necessary is because you
need some identifiers to use the LCKOWL.H file,
which in turn uses identifiers from toolbox.h,
which I could not include in this package. I have
therefore included only the relevant identifiers
in GENMDIX3.H. If you purchase Drover's toolbox,
replace this file with toolbox.h (make sure to use
the expression extern "C" {toolbox.h } when
compiling in C++)
2. Add the header file LCKOWL.H to your source
3. Add the header file LCKOWL2.H to your resource
4. Derive your MDI Frame from TMDIFrameTools
5. Initialize the controls in the window constructor
using the Init... functions (see GENMDIX.EXE for
an example). Follow the format for in GENMDIX.CPP
for establishing a status bar, tool bar and tool
box structure to be used in the Init... functions.
6. Add LCKOWL.LIB to your project
7. Add the menu options for status bar, toolbar and
toolbox creation and destruction that are relevant
to your application
8. Make sure all DLLs included in this package reside
in the windows or windows system directory
9. Compile and have fun running your application!

What Is Included

This version includes two projects: LCKOWL.PRJ and

The LCKOWL project includes all the source code and other
files to create LCKOWL.DLL, except for the Drover's Toolbox
header and library files. In order to revise and recompile
LCKOWL.PRJ, you will need to purchase the Drover's Toolbox.
However, because the Drover Toolbox DLLs are distributable,
LCKOWL.DLL can be used as-is since all the necessary
Drover's Toolbox DLLs are included.

The GENMDIX.PRJ includes all the files necessary to compile
a general purpose Windows program that includes a status
bar, a tool bar and a toolbox. The executable, GENMDIX.EXE,
is a fully functionally MDI application that makes use of
all the functions available in LCKOWL.DLL. You can use
GENMDIX.PRJ directly, adding the necessary functionality to
complete an application of your own. I suggest that you
copy GENMDIX.PRJ (all files beginning with GENMDIX*.*) to
another directory, so that you can have a clean version for
a second application. Note that the Options | Directories
expect Borland files to be in the default \borlandc\
directory. Also note that the project expects to be in a
first-level subdirectory, which means that if you copy this
to another level directory, you will have to change the
locations of the project files.

This version includes LCKUTIL.DLL, which is used by
LCKOWL.DLL along with a variety of other DLLs (not included)
to centrally process standard messages, and to provide a
central location for commonly used functions that are not
available in standard libraries or Windows (such as word-,
rather than string-, oriented functions, and some file and
directory functions).

Description of the LCKOWL.DLL and its Associated Project

The LCKOWL.DLL includes four classes: TMDIFrameTools,
TLCKStatusBar, TLCKToolBar and TLCKToolBox. TMDIFrameTools
is the class that manages the three other classes.

To use TMDIFrameTools, simply specify TMDIFrameTools instead
of TMDIFrame when you derive your own MDI Frame class.
Then, to use any of the controls, simply initialize
whichever or all the three controls using the InitStatusBar,
InitToolBar or InitToolBox functions and the standard
structures that are used for these functions. A good
example of how to do this can be found in the GENMDIX.PRJ
project. The rest is managed automatically. (NOTE: the
structure typedefs can be found in GENMDIX3.H or TOOLBOX.H
if you purchase the Drover's Toolbox software).

What exactly is being managed? When a statusbar or toolbar
is created, the client area must be adjusted so that a new
window does not overlap the statusbar or toolbar. In other
words, the statusbar and toolbar must be the topmost window
within the MDI frame. Further, when the frame is resized
the statusbar and toolbar must be resized accordingly, along
with the client area. If the user clicks on any of the
buttons on the toolbar or toolbox, then if the ID of the
button matches that of a menu item the menu option should be
initiated. There should be an easy way of updating text in
the status bar, or if the status bar has a progress line,
then the percentage filled should be easily updated.
Finally, there should be an easy way to have these controls
created, destroyed and toggled on or off using a menu
option. All this is managed by TMDIFrameTools!

To accomplish the last task, that of creating, destroying
and toggling these controls, I have designated menu IDs to
accomplish this along with their identifiers in LCKOWL2.H.
To get these effects with no programming effort, include
LCKOWL2.H in your resource file, and use those IDs for their
appropriate menu items (refer to GENMDIX.RC for an example).
Once these menu IDs are used, TMDIFrameTools manages the
rest automatically.

More Questions, Suggestions, Criticisms

Please call me at (301) 593-2745, or fax me at (301) 593-
2745, or send me a message on Compuserve at 76330,2525 with
your comments, criticisms or questions.

There are many more modules that I use, such as a window
class for displaying table (spreadsheet) information, a
window class for dialogs that reside in an MDI child window,
a window class to pull up database information (which uses
the window class to present table information), etc. I have
also created classes for database SQL querying (based on
Pioneer software's excellent product, Q+E LIB, that can
access about a dozen databases), a window class that queries
and displays full-text database and document information
(using the soon-to-be-released Fulcrum Full Text product)
and various other classes. Since this is my first round
with shareware, I am seeing if there is a level of response
that will warrant me putting the remaining classes in a DLL
for distribution.

 December 13, 2017  Add comments

Leave a Reply