/*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
|
|