JTOOLS - Details

JTools Table of Contents

Design Philosophy:

As mentioned in the table of contents, these applications were designed to be robust, yet simple and easy to understand by any intermediate level programmer (or beginning programmer with a little extra effort). I am a believer in minimal abstraction and the code should reflect this fact. I will not abstract something into a class if there is no reason to. Furthermore, the applications were meant to be used and understood by NxCore developers, regardless of skill level. Many of you may want to enhance the applications to suit your own development style and that is fine.

Each application (unless otherwise specified) is built on top of the 'generic Shell application', which features a detached GUI (Windows Dialog). All NxCore specific code will be located separately, and have their own user interface functions provided. As the GUI can be 'detached' by simply not providing the GUI callback functions to the NxCore interface, once an application is debugged and working it becomes a trivial task converting it to a command line application or an application with no GUI whatsoever (such as a Windows service).

I chose to use the MFC (Microsoft Foundation Class) libraries for the actual GUI for a number of reasons. First, it is widely used and understood by most C/C++ developers and second, it provides what I consider to be a slightly more intuitive, easy to understand framework as opposed to the raw Windows API. Finally, MFC based application impose no significant performance penalties (such as C# does).

To read the code as I have written it, set your Visual Studio tab settings to the following:

The are a number of reasons I use this particular setting, and if you use another that will be fine, the formatting of the code may look a little funky but if you can live with it, so be it.

Folder/Project Organization:

The JTools package is organized as follows:

\Docs is a folder containing the documentation you are reading now.
\Executables is a folder containing all of the executable applications.
\JT_Common contains items like the NxCoreAPI.h header, JTools_Log files and other non-GUI items that are used the same in each application.
\JT_Common_FOS contains items related to the FOS applications (JTools_FOS_LiveChains, JTools_FOS_LookupZombie).
\JT_CommonChart contains items related to charting code and might be shared by more than one application.
\JT_CommonGUI contains items related to GUI work that are not included as standard components and might be shared by more than one application. These might be custom list controls, buttons, etc.

The remainder of the folders are specific to each project and named as such. For instance, JTools_MsgTracker contains all of the required source files to build the JTools Message Tracker application.

Created Folder Organization:

Every JTool Application will save an INI file for settings and create a dated log file. The folder names are as follow:

\JTools_RunningErrors - Batch File Enabled applications will write dated file that log the success or failure of files used in Batch Processing.
\JTools_RunningINIFile - Each application will create it's own INI file (where application settings are stored) in this folder.
\JTools_RuningLogs - Each application will create a log file (if logging is enabled) in this folder.

Project Files:

Because I will usually start any new application with the Generic Shell Application, I do not rename the files associated. Instead I move everything to a new folder specific to the project, and rename only the project file and inside the project file, rename the project output, string names, version info, etc. So, in most every project file you will see the files:

The three most important files (and the three that will be modified for each specific application) are:
  1. JTNX_NxFeedHandler.cpp - This is were all of the NxCore functionality resides.

  2. JTools_ShellAppDlg.cpp - The GUI dialog were all user interaction occurs.

  3. JTools_ShellApp.rc - The resource file containing the actual dialogs, strings, versions, etc.

Compiler Version & Settings:

All projects were built with:

All projects have been run and tested in both Release and Debug mode and compiled/ran on both Win32 and Win64 (x86, x64) platforms.

Below are screen shots to the most important compiler settings:

JTools Table of Contents