194 lines
5.2 KiB
C++
Executable File
194 lines
5.2 KiB
C++
Executable File
/*
|
|
* ALSTREAM.H
|
|
*
|
|
* Header file for ArchiveLib 1.0
|
|
*
|
|
* Copyright (c) 1994 Greenleaf Software, Inc.
|
|
* All Rights Reserved
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* These macros and types are all used in the debug versions of the
|
|
* ArchiveLib.
|
|
|
|
* This is a utility class that is used in some of the demos.
|
|
* It is a simple implementation of a C++ iostream that writes
|
|
* to a multiline edit control. The constructor wants a window
|
|
* handle and a control ID. In the implementations in the demos,
|
|
* the window handle is that of the dialog box, and the control
|
|
* ID is that of the multiline edit control. This class
|
|
* works pretty well, but it is by no means bulletproof. For one
|
|
* thing, it won't work from inside a DLL, because of far/near
|
|
* problems. So if you link to the DLL, you are still going to
|
|
* have to link to the static library to get this class. That
|
|
* is why the class isn't defined with the usual AL_CLASS_TYPE
|
|
* and AL_PROTO macros.
|
|
*
|
|
* Note that _ALControlStream is used internally as a helper.
|
|
* ALEditControlStream is what the programmer uses, but when
|
|
* creating an ALEditControlStream, we have to create an
|
|
* _ALControlStream object to do some of the work.
|
|
*
|
|
* CLASS DEFINITIONS:
|
|
*
|
|
* _ALControlStream : The streambuf used by ALEditControlStream
|
|
*
|
|
* ALEditControlStream : The ostream that writes to multiline edit
|
|
* controls.
|
|
* PROTOTYPES:
|
|
*
|
|
* ostream& gfendl( ostream &s ) : Used to generate a newline and
|
|
* a flush for ALEditControlStream.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
*/
|
|
|
|
#ifndef _ALSTREAM_H
|
|
#define _ALSTREAM_H
|
|
|
|
#define STRICT
|
|
#include <windows.h>
|
|
#include "arclib.h"
|
|
|
|
#if defined( __cplusplus )
|
|
|
|
/* Won't work in a DLL! */
|
|
|
|
#if !defined( AL_BUILDING_DLL )
|
|
|
|
#include <iostream.h>
|
|
|
|
/*
|
|
* class _ALControlStream
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* This is a class derived from streambuf. We attach this to an
|
|
* ALEditControlStream, and it will write to the edit control
|
|
* specified in the constructor.
|
|
*
|
|
* DATA MEMBERS
|
|
*
|
|
* hWindow : The handle of the edit control.
|
|
*
|
|
* MEMBER FUNCTIONS
|
|
*
|
|
* _ALControlStream() : The constructor, called by the ALEditControlStream
|
|
* constructor.
|
|
*
|
|
* ~_ALControlStream() : The virtual destructor.
|
|
*
|
|
* overflow() : Called by the base class when the buffer is about
|
|
* to overflow. This is our cue to send bytes out
|
|
* to the edit control.
|
|
*
|
|
* underflow() : Called by the base class when the more data is
|
|
* needed by the buffer for reading. We don't
|
|
* supply any data, this is a stub.
|
|
*
|
|
* sync() : Base class calls this when it feels like flushing
|
|
* the buffers.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
*/
|
|
|
|
class _ALControlStream : public streambuf {
|
|
/*
|
|
* Constructors, destructors, friend declarations
|
|
*/
|
|
friend class ALEditControlStream;
|
|
|
|
public :
|
|
_ALControlStream( HWND hwnd, int control );
|
|
virtual ~_ALControlStream();
|
|
/*
|
|
* The copy constructor and assignment operator are not supported. I
|
|
* declare them here because I don't want the compiler to generate
|
|
* default versions for me.
|
|
*/
|
|
protected :
|
|
operator=( _ALControlStream& );
|
|
_ALControlStream( _ALControlStream& );
|
|
/*
|
|
* Member functions and overloaded operators
|
|
*/
|
|
protected :
|
|
virtual int overflow( int );
|
|
virtual int underflow();
|
|
virtual int sync();
|
|
/*
|
|
* Data members
|
|
*/
|
|
protected :
|
|
HWND hWindow;
|
|
};
|
|
|
|
/*
|
|
* class ALEditControlStream
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* This is the demo class that actually performs output to the
|
|
* edit control. It doesn't really have to do anything other than
|
|
* create itself and then create the streambuf derivative, because
|
|
* the streambuf does al the work.
|
|
*
|
|
* DATA MEMBERS
|
|
*
|
|
* mpControlStream : A pointer to the streambuf object we create,
|
|
* because without him I am nothing.
|
|
*
|
|
* MEMBER FUNCTIONS
|
|
*
|
|
* ALEditControlStream() : The constructor.
|
|
* ~ALEditControlStream() : The destructor.
|
|
*
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
*/
|
|
|
|
class ALEditControlStream : public ostream
|
|
{
|
|
/*
|
|
* Constructors, destructors, and friends
|
|
*/
|
|
public :
|
|
ALEditControlStream( HWND handle, int control_id = -1 );
|
|
~ALEditControlStream();
|
|
/*
|
|
* The copy constructor and assignment operator are not supported. I
|
|
* declare them here because I don't want the compiler to generate
|
|
* default versions for me.
|
|
*/
|
|
protected :
|
|
operator=( ALEditControlStream& );
|
|
ALEditControlStream( ALEditControlStream& );
|
|
/*
|
|
* Data members
|
|
*/
|
|
_ALControlStream mpControlStream;
|
|
};
|
|
|
|
/*
|
|
* The gfendl manipulator is used to send an eol and flush the buffer
|
|
* when writing to an ALEditControlStream. It serves the same purpose
|
|
* as an endl written to a normal stream. The difference is that an
|
|
* eol on a regular stream has a "/n/r" pair, and this guy doesn't.
|
|
*/
|
|
ostream& gfendl( ostream &s );
|
|
|
|
#endif /* #if !defined( AL_BUILDING_DLL ) */
|
|
|
|
#endif /* #if defined( __cplusplus ) */
|
|
|
|
#endif /* #ifdef _ALSTREAM_H */
|