Source file: /~heha/basteln/PC/oszi/oszi.zip/src/miniwnd.h

/* Jaja, eine grässliche Headerdatei!! */

extern COLORREF GridColor;
extern POINT step;		// Gitternetz-Schrittweite
extern POINT tick;
extern POINT Kaestel;
extern POINT SubTick;
extern POINT bmext;		// (nicht mehr!!) Bitmap-Größe
extern RECT Rand;		// Gitternetz-Rand (im Client-Bereich)
extern POINT Mitte;
extern COLORREF BackColor;
extern HPEN XorPen;
extern HBITMAP blt[];
extern HBITMAP NullBitmap[];
extern POINT lastmouse;	// Fadenkreuz-Position
extern HDC bltdc[];
extern HPEN BackPen;
extern HPEN GridPen;
extern HBRUSH BackBrush;
extern COLORREF AuswahlFarbe;
extern POINT ClientExt;	// auch Größe der beiden Hintergrund-Bitmaps
extern UINT DispOpt;		// Anzeige- und Gitter-Optionen (=0)
void SetDispOpt(UINT,UINT);
void Gitternetz(HDC dc);
void Fadenkreuz(HDC dc=bltdc[0]);
void MaleHinterGraf(HDC dc);
void MaleGraf(HDC dc);
void BltAlles(HDC dc);
void wmSize(int x, int y);

#define DO_LINE	 1	// PolyLine statt Punkte
#define DO_XOR	 2	// Linie/Pixel mit R2_XORPEN statt R2_COPYPEN ausgeben
#define DO_DB	 4	// DoubleBuffer
#define DO_GRID	 8	// Große Kästchen
#define DO_TICK	16	// Kleine Marker
#define DO_CROSS 32	// Fadenkreuz
#define DO_BACK 64	// Hintergrundpinsel (stets vorhanden)
#define DO_TB	128	// Dreifach-Puffer (Alles hinter dem Kurvenzug)
#define DO_DB_INVAL	0x8000U
#define DO_TB_INVAL	0x4000U

void Inval(bool background=false, LPRECT rcitem=NULL);
void _stdcall Line(HDC dc, int x1, int, int, int);
//void PaintWinBitmap(HDC dc,int x, int y, HBITMAP bm);
void _stdcall ShowPopupMenu(HMENU, int, int);
// Aufruf TrackPopupMenu an Client-Koordinaten x und y

// Ein vollständig verketteter Baum
struct KNOTEN;		// Vorausdeklaration
struct NODE{		// Pseudoknoten für Wald-Wurzeln
 KNOTEN *sub;		// Erstes Kind
 inline NODE() {sub=NULL;};	// ZeroMemory-Konstruktor
};
struct KNOTEN:NODE {	// Richtiger Knoten für Bäume
 NODE *parent;		// Elter (jeder verbundene Knoten hat eins)
 KNOTEN *next;		// nächstes Geschwister (Nachfolger)
 KNOTEN *prev;		// vorheriges Geschwister (Vorgänger)
 void SetParent(NODE*);	// Als erstes Kind von <p> setzen
 void SetSibling(KNOTEN*);// Als Vorgänger von <b> setzen
 inline KNOTEN(NODE*p) {parent=NULL; SetParent(p);};
 virtual ~KNOTEN();
 virtual void Paint(HDC);	// extra für Geschwindigkeit
 virtual bool RelayMsg(UINT,WPARAM,LPARAM);
private:
 void remove();		// Herausnehmen
};

#ifndef WIN32
typedef enum {TTM_ADDTOOL,TTM_NEWTOOLRECT,TTM_DELTOOL};
#endif

struct MINIWND:KNOTEN {
 RECT rcitem;	// in Bitmap-Koordinaten (= Client)
 LPCTSTR hint;
 UINT id;
 BYTE style;	// hmove=1,vmove=2,hsize=4,vsize=8
 BYTE state;	// Hover, Focus...
 BYTE where;	// Auf welchem Rand ist die Maus?
 POINTS drag;	// Klickposition bei WM_xBUTTONDOWN
 MINIWND(NODE*,RECT*,LPCTSTR,UINT,BYTE);
 MINIWND(NODE*);
 void Inval() {::Inval(true,&rcitem);};
 void SetState(BYTE);
 void SetState(BYTE,BYTE);	// mit AND und XOR
 void SetParent(NODE*);
 inline void Moved() {ToolMessage(TTM_NEWTOOLRECT);};
 void ToolMessage(UINT Msg);
 virtual ~MINIWND() {ToolMessage(TTM_DELTOOL);};
 void Schieb(int,int,bool);	// Fenster verschieben, ggf. Maus mitnehmen
			// Veränderung des Rechtecks oder von "Rand"
 virtual void Paint(HDC);
 virtual bool RelayMsg(UINT,WPARAM,LPARAM);
 static MINIWND* _stdcall MiniWndFromPoint(POINTS);
};

struct TOOLTIP:MINIWND {
 TCHAR hintbuf[256];
 TOOLTIP();
 virtual ~TOOLTIP();
 void _cdecl SetTip(PCRECT,LPCTSTR,...);
 virtual void Paint(HDC);
 virtual bool RelayMsg(UINT,WPARAM,LPARAM);	// für Timer
 COLORREF TextColor;	// gleichzeitig Randfarbe
 COLORREF BackColor;	// Hintergrund fürs Rundeck (?)
 HBRUSH Back;
 HPEN Pen;
 HFONT Font;
 BYTE GdiObj;
 void CreateGdiObj();
 void DeleteGdiObj();
};

struct GITTER:MINIWND {
 GITTER();
 virtual void Paint(HDC dc) {MINIWND::Paint(dc); if (DispOpt&DO_GRID) ::Gitternetz(dc);};
 virtual bool RelayMsg(UINT,WPARAM,LPARAM);	// für ToolTip
};

//Verwaltung eines einfachen, grafischen Knopfes (Mini-Objekt)
struct MYBUTTON:MINIWND{
 typedef enum {ENGER,WEITER,TIEFER,HOEHER,EINAUS,PLAY,PAUSE} EBild;
 MYBUTTON(NODE*,RECT*,LPCTSTR,UINT,EBild);
 void SetState(BYTE);	// nicht-virtuell!! (idiotisch, jaja)
 void Enable(BOOL);
 virtual void Paint(HDC dc);
 virtual bool RelayMsg(UINT,WPARAM,LPARAM);
 EBild bild;		// Bild-Index
};
/* Irgendwie braucht man unter Windows immer wieder das gleiche Bitregister:
 * 0 - gedrückt (zu zeichnen, HOVER)
 * 1 - gesperrt (zu zeichnen, grau)
 * 2 - fokussiert (zu zeichnen, punktierte Umrandung)
 * 3 - selektiert (zu zeichnen, blau)
 * 4 - wurde gedrückt (für HOVER)
 * 5 - Maus befindet sich über dem Rechteck */
#define STA_PRESSED	0x01
#define STA_GRAYED	0x02
#define STA_FOCUSED	0x04
#define STA_SELECTED	0x08
#define STA_KLICKED	0x10
#define STA_HOVER	0x20

/********************************************************
 ** Klasse M_K: Basis für Massesymbol und Triggerkreuz **
 ********************************************************/
struct M_K:MINIWND {	// Masse- oder Triggersymbol
 POINT mitte;		// (echte) Mittenposition
 BYTE aussen;	// Bits zur Markierung, dass Kreuz außerhalb ist
 void SetGdiObjekte(COLORREF);
 M_K(NODE*p):MINIWND(p) {PolygonPinsel=0;};
 virtual ~M_K() {SetGdiObjekte((COLORREF)-1);};
private:
// HPEN PfeilStift;
 HBRUSH PolygonPinsel;	// Der Stift für den Polygonrand ist global
protected:
 void CalcRect(RECT*);	// aus Mitte Begrenzungsrechteck berechnen
 void PaintPoly(HDC,const POINT*,int);
 void Hilfspfeil(HDC);
};

struct KANAL;		// Vorausdeklaration
struct MASSE:M_K {
 KANAL *k;
 MASSE(KANAL*);
 virtual void Paint(HDC dc);
 virtual bool RelayMsg(UINT,WPARAM,LPARAM);
 void CalcRect(RECT*);
 bool Update(BYTE);		// hier: neue Y-Position (k->nulllinie)
 inline void UpdateGdiObjekte();
};

struct TRIGG;
struct KREUZ:M_K {
 TRIGG *t;
 KREUZ(TRIGG*);
 virtual void Paint(HDC dc);
 virtual bool RelayMsg(UINT,WPARAM,LPARAM);
 void CalcRect(RECT*);
 bool Update(BYTE);		// bei Änderung von t->pretrig und/oder t->pegel
 inline void UpdateGdiObjekte();
};

// Ein Wald aus 3 Bäumen, nur Pseudoknoten
extern NODE Anker[];
// Anker[0] = TOPMOST, Anker[1] = NORMAL, Anker[2] = HIDDEN
extern MINIWND *FocusOwner;
extern GITTER *gitter;

extern HWND MainWnd;
extern int numkanal;
extern KANAL *kanal;
#ifdef WIN32
extern HWND Tooltip;
#endif
extern TOOLTIP *tip;
extern HBITMAP WinBitmaps[];
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded