Home > Articles > Programming

Build Screensavers with a Custom Screensavers Library in Borland C++

Jeff Friesen
  • PrintPrint
  • Share ThisShare This
  • DiscussDiscuss
Close WindowJeff Friesen

Jeff Friesen

Learn more…

Using Transitions to Simplify JavaFX Animations
Sep 9, 2009
Styling Swing Components with Java CSS
Aug 28, 2009
Show Me the Movie with DirectShow
Apr 28, 2009
Playing Media with Java Media Components
Feb 27, 2009
Creating Java User Interfaces with Project Scene Graph
Feb 10, 2009
Blending Images in Java
Sep 12, 2008
Introduce Animated Cursors to Java GUIs, Part 3
Apr 30, 2008
Introduce Animated Cursors to Java GUIs, Part 2
Apr 18, 2008
Introduce Animated Cursors to Java GUIs, Part 1
Apr 11, 2008
Enhance Java GUIs with Windows Icons
Apr 4, 2008
Taming Mustang, Part 2: Scripting API Tour
Nov 2, 2007
Visit Java's Relatives: Jython and Groovy
May 4, 2007
Generics 101: Mastering the Fundamentals
Mar 23, 2007
Taming Mustang, Part 3: A New Script Engine
Mar 2, 2007
Taming Mustang, Part 1: Collections API
Feb 16, 2007
PCX Meets Image I/O: Creating an Image-Reading Java Plug-in
Dec 29, 2006
Mustang (Java SE 6) Gallops into Town
Oct 20, 2006
GridBagLayout Versus FormLayout
Oct 6, 2006
Laying Out Realistic GUIs the GridBagLayout Way
Sep 29, 2006
Harness the Power of Java's GridBagLayout
Sep 22, 2006
Tools of the Trade: SwingX Meets Swing with New and Extended Components
Aug 4, 2006
Have Fun with the Custom Screensavers Library
Mar 10, 2006
Build Screensavers with a Custom Screensavers Library in Borland C++
Feb 24, 2006
Tools of the Trade: Flash meets Java with Transform SWF and JFlashPlayer
Feb 17, 2006
Tools of the Trade, Part 3: Using the JGoodies Animation Library
Dec 22, 2005
Tools of the Trade, Part 2: Building Graphs with JGraph
Dec 9, 2005
Tools of the Trade, Part 1: Creating PDF documents with iText
Nov 4, 2005
From Literals to Expressions in Java
Aug 16, 2002
Build Your Own Java-Based Email Programs
May 10, 2002
Exploring Java's Network API: URIs and URLs
May 1, 2002
Exploring Java's Network API: Sockets
Apr 19, 2002
Basic Thread Operations in Java
Mar 22, 2002
Working with Streams in Java
Mar 22, 2002
Advanced Tips for More Powerful Tables
Nov 20, 2001
Exploring Swing's Table Component
Nov 20, 2001
Simple Tips for More Powerful Tables
Nov 20, 2001
A Handful of Tips for Swing Programs
Apr 13, 2001
A Trio of Tips for AWT Programs
Apr 13, 2001
Automating Programs with Robots
Apr 13, 2001
Build Your Own Media Player
Apr 13, 2001
Drawing Cubic Curves
Apr 13, 2001
Scaling Images
Apr 13, 2001
Using the Swing API Timers
Apr 13, 2001

Sorry, this author hasn't posted any blogs.

Tired of those same stale Windows screensavers? Hesitant to create your own? Jeff Friesen has an idea: use his screensavers library. He shows you how to obtain a free copy of Borland C++ 5.5.1 and presents a short product tutorial. Then he takes you on a tour of his screensavers library and shows how to build this library with Borland C++, along with an example screensaver and code you can download.

The Internet provides lots of Websites that advertise screensavers for the Microsoft Windows operating system. Perhaps you want to join this community by creating your own screensavers. The usual way to build Windows screensavers is to work with Microsoft’s Visual C++ product and its scrnsave.lib library. However, you might prefer to use my own screensavers library, for two important reasons:

  • The library’s C source code is accessible. Along with providing educational value, this source code can be modified (if necessary) to deal with unusual kinds of screensavers (although I cannot think of a screensaver requiring a modified library, the possibility exists). In contrast, source code isn’t accessible (at least I couldn’t find any source code) for scrnsave.lib.
  • You can link your screensavers with the library. You should be able to compile library source code (after possibly making some source code changes) and place the resulting object code into a .lib file using your own C/C++ tools. You can then link your screensaver object code with the .lib file. In contrast, I couldn’t link my Borland/Inprise screensaver object code with scrnsave.lib.

This article introduces you to my screensavers library. Because I created that library using Borland C++ 5.5.1, the article first shows you how to obtain a free copy of this product and presents a short product tutorial. The article next takes you on a tour of the screensavers library; you learn how to build this library with Borland C++. A presentation of an example screensaver that you can build with the library wraps up this article.

Get Acquainted with Borland C++ 5.5.1

If you like programming in C and C++, you’ll appreciate a good compiler. A few years ago, Borland (also known as Inprise) made its latest (at that time) C/C++ compiler technology and associated command-line tools freely available for download as the Borland C++ 5.5.1 product.

Borland C++ 5.5.1’s compiler technology produces very fast compiles, optimizes code, and targets Win32 Portable Executable (PE) programs. It includes ANSI/ISO C++ language support—including the Standard Template Library (STL) framework and support for C++ templates. It also includes Borland’s entire Runtime Library (RTL).

Although Borland C++ 5.5.1 dates back to 2000, this product is still useful; I have used this product to create various Win32 projects, including the screensavers library. If you’ve never worked with Borland C++ 5.5.1, this section will get you started.

Download, Install, and Configure Borland C++ 5.5.1

Point your Web browser at Borland’s Website and select the 8.7 Mb Compiler entry in the Downloads table on the resulting Web page. You will be prompted to enter your login information (your name or email address, and a password) and click the Login button to log into Borland’s Website. Because you probably will be a new user, click the New User button to set up a free account, and then log in. After successful login, follow the Website’s instructions to download the Borland C++ 5.5.1 installer program.

Assuming a successful download, start running the installer and follow its directions. Although the installer defaults to installing Borland C++ 5.5.1 into the c:\borland\BCC55 directory, you can choose a different directory if desired.

The installation directory contains Bin, Examples, Help, Include, and Lib directories. The Bin directory contains compiler and other command-line tools; Examples contains examples that illustrate different portions of the STL; Help contains a single help file that offers help on the various command-line tools; Include contains header files for the RTL, STL, and Windows SDK; and Lib contains all static and import library files—and the startup code modules.

After the installer completes, add Bin to your PATH environment variable, so that you can run the command-line tools from anywhere on your hard drive. For example, assuming that Borland C++ 5.5.1 has been installed into its default installation directory, set path=c:\borland\bcc55\bin;%path% makes those tools widely available. Case is not significant.

Command-Line Environment

Borland C++ 5.5.1’s tools are executed at the command line. Figure 1 reveals bcc32.exe (which contains the compiler technology) being executed, along with that tool’s output.

Figure 1

Figure 1 Borland C++ 5.5.1 command-line syntax and options

The output presents a variety of command-line options that control the operation of bcc32.exe. For example, the -P option forces C++ compilation.

The presence of -P suggests two compilation choices: C or C++. By default, a source file’s extension determines the compilation. C compilation occurs if the extension is .c. But if the extension is .cpp, C++ compilation takes place. Use the -P option to guarantee that C++ compilation occurs, no matter the extension.

When it comes to creating screensavers, you probably won’t use the -P option. Rather, you’ll use -I and -L to choose the directories to include in the compilation (these are the directories that contain the header files), and to choose the directories that contain those libraries and object files necessary for linking.

A First EXE

It’s easy to create programs with bcc32.exe. For example, let’s create a simple program that outputs the current time and date, adjusted for local time zone and daylight savings time. Listing 1 presents this program’s C source code.

Listing 1 now.c

// now.c

#include <stdio.h>
#include <time.h>

void main (void)
{
  time_t seconds;
  struct tm *tstruct;

  // Return the number of seconds that have elapsed since 00:00:00 GMT,
  // January 1, 1970.

  seconds = time (NULL);

  // Convert from seconds to a structure. Correct for time zone and daylight
  // savings time.

  tstruct = localtime (&seconds);

  // Output the structure’s contents in human-readable format.

  printf ("Local time is: %s", asctime (tstruct));
}

Invoke the following command line (where the current directory will be assumed to be c:\borland\BCC55) to compile now.c and create a now.exe program:

bcc32 -Iinclude -Llib now.c

The -I option specifies include as the directory that contains the stdio.h and time.h header files. The -L option specifies lib as the directory that contains library and startup code module files.

Assuming that there are no error messages, you should find a now.exe file in the current directory. (You will also notice now.obj and now.tds files—ignore them.) Run now.exe, and you should observe the current time and date based on your time zone and daylight savings time.

From Console Mode to GUI Mode

The bcc32.exe tool created now.exe as a console-mode PE program. This format is appropriate for programs that have a main() function, obtain their input from the standard input device, and send their output to the standard output device. It is not appropriate for programs (including the screensavers library) that have a WinMain() function, create windows, and contain message loops. Instead, you must create such as program as a GUI-mode PE program. For example, let’s create a simple GUI-mode program that outputs a message in a message box. Listing 2 presents this program’s C source code.

Listing 2 hellowin.c

// hellowin.c

// Hello, from Windows.

#include <windows.h>

// ==========================================================================
// int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hinstancePrev,
//           LPSTR lpszCmdLine, int iCmdShow)
//
// Program entry point.
//
// Arguments:
//
// hinstance   - program’s instance handle (which uniquely identifies the
//         program when running under Windows)
//
// hinstancePrev - obsolete (leftover from Windows 3.1)
//
// lpszCmdLine  - address of \0-terminated string that contains command-line
//         parameters (not used in this program)
//
// iCmdShow   - number that indicates how the window is to be initially
//         displayed (not used in this program)
//
// Return    - WM_QUIT message’s wParam value (0, in this simple program)
// ==========================================================================

#pragma argsused
int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hinstancePrev,
          LPSTR lpszCmdLine, int iCmdShow)
{
  MessageBox (HWND_DESKTOP, "Welcome to Windows!", "HelloWin",
        MB_ICONINFORMATION | MB_OK);

  return 0;
}

Invoke the following command line to compile hellowin.c and build hellowin.exe:

bcc32 -tW -Iinclude -Llib hellowin.c

The -tW option indicates that the source code contains a WinMain() function and that a GUI-mode program is to be created.

If all goes well, you should find a hellowin.exe file in the current directory. Run that program. A message box appears with a welcome message.

  • Share ThisShare This
  • Your Account

Discussions

Gratitude
Posted Nov 20, 2009 02:09 AM by briankd
0 Replies

Make a New Comment

You must log in in order to post a comment.

Related Resources

Danny KalevMinutes from the October 2009 Meeting
By Danny Kalev on November 19, 2009 No Comments

The minutes from the Santa Cruz (October 2009) meeting are available here. Even if you're not a language layer at heart, I encourage you to read them.

Danny KalevA Reader's Opinion on Attributes
By Danny Kalev on October 20, 2009 No Comments

In August I dedicated a series to the debate about C++0x attributes. I believe that it covered the subject in a balanced and detailed way, but I keep getting complaints from C++ users who don't like attributes for various reasons. Here's a recent email I received from a Polish C++ programmer. While it  doesn't represent my opinion about attributes -- I'm rather neutral about this feature and consider it a "solution waiting for a problem" -- but it suggests that attributes are still a highly controversial issue that will haunt C++ for a long time. The email is quoted here with minor edits that and as usual, with all private details removed.

Danny KalevFollowup: The Web 2.0 Guy I Ain't
By Danny Kalev on October 16, 2009 1 Comment

Almost a year ago, I posted here The Web 2.0 Guy I Ain't. People wonder whether I still resist all those Web 2.0 features and technologies at the end of 2009.

See All Related Blogs

There are currently no related titles. Please check back later.

Informit Network