Source file: /~heha/messtech/sensokom.zip/include/TOOLSTAT.H

/*Verwaltet konfigurierbare Werkzeugleiste und Statuszeile in einem Fenster.
 Für SDI- und MDI-Projekte gleichermaßen geeignet.
 Setzt für Funktion Windows für Workgroups oder Win9x voraus -
 unter Windows 3.1 gibt's halt keine Gimmicks.
 Nur wenige benutzte Funktionen:
  * InitCommonControls
  * CreateToolbar
  * CreateStatusWindow

 Die Werkzeugleiste hat die feste ID 98, die Statuszeile die ID 99.
 Die Toolbar-Bitmap in der Ressource muss ebenfalls ID 98 haben,
 die Toolbar-Initialisierung als RCDATA-Ressource auch ID 98.
 Die Stringtabelle muss pro Menüpunkt eine Statuszeilen-Beschreibung
 mit jeweils gleicher ID bereithalten (empfohlen: ab 200),
 für die Button-Beschreibungen zur Konfiguration eine MULTI_SZ_Kette
 bei ID 98 und 99. ToolTips gibt's ab Win95.
 Für das Systemmenü werden Hilfestrings aus der COMMCTRL.DLL
 herangezogen, wenn keine eigenen Strings diese überschreiben.
 Das Hauptprogramm muss noch den Code TBN_CustHelp verarbeiten,
 bei allen anderen Codes ohne DefWindowProc zurückkehren.
 Die Hilfe sollte erwähnen, dass man die Knöpfe auch mit gedrückter
 Umschalttaste umherbewegen kann!

 Verwendung in der MainWndProc:

  LRESULT ret=HandleToolStat(Wnd,Msg,wParam,lParam);
  switch (Msg) {
   ...
   case WM_Command: switch (LOWORD(wParam)) {
    ...
    case 98: switch (GET_WM_COMMAND_ID(wParam,lParam)) {
     case TBN_CustHelp: WinHelp(LOWORD(lParam),HelpFileName,HELP_Context,98)
     break;
    }return ret;	// Andere Nachrichten sind bereits oben verarbeitet
    ...

 Das ist alles! Um den lästigen Rest kümmert sich diese Unit
 sowie sorgsam zusammengestellte Ressourcen.

 BUG: Beim Einfügen mehrer Zwischenräume zwischen 2 Knöpfe "vergißt"
 Windows alle Zwischenräume beim Laden. Fehler ist bei Win98 beseitigt.

 h#s 04/03*/
#ifndef toolstat_h
#define toolstat_h
#ifdef __cplusplus
extern "C" {
#endif

#ifndef _WIN32
# define INT int
# define CHAR char
# define TCHAR char
# define LPTSTR LPSTR
# define LPCTSTR LPCSTR
# define TEXT(x) x
# define iString idsHelp
# define MAX_PATH 128
# include <stddef.h>
typedef wchar_t const far*LPCWSTR;
# include <commctrl.h>		// 32 bit version
typedef struct {
 HWND hwndFrom; WORD rsv1;	// high parts unused in Win16
 WORD idFrom, rsv2;
 WORD code, rsv3;
}NMHDR,*PNMHDR,far*LPNMHDR,near*NPNMHDR;
typedef struct {
 NMHDR hdr;
 LPSTR lpszText;
 char szText[80];
 HINSTANCE hinst; WORD rsv4;
 WORD uFlags, rsv5;
}TOOLTIPTEXT,*PTOOLTIPTEXT,far*LPTOOLTIPTEXT,near*NPTOOLTIPTEXT;
# define TBSTYLE_TOOLTIPS 0x100
# define TBSTYLE_WRAPABLE 0x200
# define WM_NOTIFY	0x004E
# define TTN_NEEDTEXT	((WORD)-520)
//# define CreateToolbarEx(a,b,c,d,e,f,g,h,i,j,k,l,m) CreateToolbar(a,b,c,d,e,f,g,h)
typedef struct {
 BYTE fVirt;
 WORD key;
 WORD cmd;
}ACCEL,*PACCEL,far*LPACCEL,near*NPACCEL;
# define FVIRTKEY	0x01
# define FNOINVERT	0x02
# define FSHIFT		0x04
# define FCONTROL	0x08
# define FALT		0x10
#endif //!WIN32

#ifndef elemof
# define elemof(x) (sizeof(x)/sizeof(x[0]))
#endif
#ifndef T
# define T(x) TEXT(x)
#endif
#ifndef nobreak
# define nobreak
#endif

extern HINSTANCE gHInstance;	/* globales HInstance */
extern HINSTANCE hCommCtrl;
extern LPCTSTR	StdProfile;	/* INI-Datei */
extern LPCTSTR	HelpFileName;	/* Hilfe-Datei (für Werkzeugleiste) */
extern HINSTANCE hCommCtrl;	/* Handle der dynamisch geladenen DLL */
extern HWND	MainWnd;	/* Handle des Hauptfensters*/
extern HMENU	MainMenu;	/* Handle des Hauptmenüs */
extern HACCEL	AccTable;	/* für Anzeige in ToolTips */
extern HWND	Toolbar;	/* Handle für Windows-Werkzeugleiste */
extern HWND	Status;		/* Handle für Windows-Statuszeile */

extern HLOCAL	ButtonDescript;	/* Kurzbeschreibungen zur Konfiguration der
			 Werkzeugleiste*/
extern HGLOBAL	ButtonInfo;	/* Ressourcen-Objekt mit nachfolgenden Daten*/
extern HLOCAL	MenuBitmaps;	/* HBitmap-Speicher zum Wiederaufräumen */

typedef struct {	/* So liegen sie in der RCDADA-Ressource*/
 WORD	id;		/* Endekennung mit id=0*/
 WORD	stasty;		/* INITIALER STIL; Freiraum DAVOR mit gesetztem Bit 8,*/
}TRC_ButtonInfo,*PRC_ButtonInfo,far*LPRC_ButtonInfo;
/*In der gleichen Reihenfolge sind die Bilder anzuordnen*/
/*Nicht löschbare Buttons haben Stilbit 4 gesetzt*/
#define STA(x) LOBYTE(x)/*unbenutzter Button mit gesetztem Bit 3*/
#define STY(x) HIBYTE(x)

void ToggleToolbar(UINT MenuID);
void ToggleStatus (UINT MenuID);
/*Schaltet die Fenster ein und aus und führt das Häkchen an einem Menüpunkt
 mit. Falls per Dialog geschaltet, müssen die Handles "Toolbar" und "Status"
 herangezogen werden. (Es ist natürlich nicht sinnvoll, die Toolbar
 per Toolbar-Knopf auszuschalten - wo sollte man sie dann anknipsen?)*/
void SetMenuBitmaps(void);
/* Setzt Bitmaps aus der Toolbar verkleinert ins Menü = Wiedererkennung */
void DeleteMenuBitmaps(void);
/* Löscht oben generierte Bitmaps - vorher Menü löschen! */

LRESULT HandleToolStat(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam);
/*Sollte am Anfang der WindowProc() stehen, kümmert sich "um alles":
 * lädt COMMCTRL.DLL dynamisch
 * setzt MainWnd
 * behandelt Konfiguration der Werkzeugleiste
 * speichert Werkzeugleisten-Zustand
 * stellt Strings in Statuszeile bei Menüs und Knopfdrücken dar
 Rückgabewert geht (in LongInt gewandelt) an die Fensterprozedur*/
void SetMenuAccels(HMENU m, HACCEL a, TCHAR delim);
/*garniert ein Menü mit lokalisierten Akzelerator-Beschreibungen,
 delim ist das Trennzeichen, entweder #7 (rechtsbündig) oder #9*/

void CalcClientRect(LPRECT R);

LPCTSTR GetFileNamePtr(LPCTSTR s);
LPCTSTR lstrchr(LPCTSTR s, TCHAR c);
void Accel2Text(LPACCEL accel, LPTSTR s);

#ifdef __cplusplus
}
#endif
#endif

Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded