|
|
|
@ -12,6 +12,9 @@ |
|
|
|
#include "graph.h" |
|
|
|
#include "ftedev.h" |
|
|
|
#include "ftedbgra.h" |
|
|
|
#include "fteext.h" |
|
|
|
#include "../plotting/graf.h" |
|
|
|
#include "../plotting/graphdb.h" |
|
|
|
|
|
|
|
/* |
|
|
|
* The ngspice.h file included above defines BOOLEAN (via bool.h) and this |
|
|
|
@ -22,45 +25,45 @@ |
|
|
|
*/ |
|
|
|
#undef BOOLEAN |
|
|
|
|
|
|
|
#pragma warn -dup // wegen Redefinition von NUMCOLORS |
|
|
|
#pragma warn -dup /* wegen Redefinition von NUMCOLORS */ |
|
|
|
#include <windows.h> |
|
|
|
#include <windowsx.h> |
|
|
|
#include "suffix.h" |
|
|
|
#pragma hdrstop |
|
|
|
|
|
|
|
// Typen |
|
|
|
typedef struct { // Extra Fensterdaten |
|
|
|
HWND wnd; // Fenster |
|
|
|
HDC hDC; // Device context des Fensters |
|
|
|
RECT Area; // Zeichenflaeche |
|
|
|
int ColorIndex; // Index auf die akt. Farbe |
|
|
|
int PaintFlag; // 1 bei WM_PAINT |
|
|
|
int FirstFlag; // 1 vor dem ersten Update |
|
|
|
/* Typen */ |
|
|
|
typedef struct { /* Extra Fensterdaten */ |
|
|
|
HWND wnd; /* Fenster */ |
|
|
|
HDC hDC; /* Device context des Fensters */ |
|
|
|
RECT Area; /* Zeichenflaeche */ |
|
|
|
int ColorIndex; /* Index auf die akt. Farbe */ |
|
|
|
int PaintFlag; /* 1 bei WM_PAINT */ |
|
|
|
int FirstFlag; /* 1 vor dem ersten Update */ |
|
|
|
} tWindowData; |
|
|
|
typedef tWindowData * tpWindowData; // Zeiger darauf |
|
|
|
typedef tWindowData * tpWindowData; /* Zeiger darauf */ |
|
|
|
#define pWindowData(g) ((tpWindowData)(g->devdep)) |
|
|
|
|
|
|
|
// Forwards |
|
|
|
LRESULT CALLBACK PlotWindowProc( HWND hwnd, // Fensterprozedur |
|
|
|
/* Forwards */ |
|
|
|
LRESULT CALLBACK PlotWindowProc( HWND hwnd, /* Fensterprozedur */ |
|
|
|
UINT uMsg, WPARAM wParam, LPARAM lParam); |
|
|
|
|
|
|
|
// externals |
|
|
|
extern HINSTANCE hInst; // Instanz der Applikation |
|
|
|
extern int WinLineWidth; // Breite des Textfensters |
|
|
|
void WPRINT_PrintInit( HWND hwnd); // Windows Drucker Init |
|
|
|
void WaitForIdle(void); // Warte, bis keine Events da |
|
|
|
|
|
|
|
// lokale Variablen |
|
|
|
static int IsRegistered = 0; // 1 wenn Fensterkl. reg. |
|
|
|
#define NumWinColors 23 // vordef. Farben |
|
|
|
static COLORREF ColorTable[NumWinColors]; // Speicher fuer die Farben |
|
|
|
static char * WindowName = "Spice Plot"; // Fenstername |
|
|
|
static WNDCLASS TheWndClass; // Plot-Fensterklasse |
|
|
|
static HFONT PlotFont; // Font-Merker |
|
|
|
#define ID_DRUCKEN 0xEFF0 // System-Menu: drucken |
|
|
|
#define ID_DRUCKEINR 0xEFE0 // System-Menu: Druckereinrichtung |
|
|
|
static const int ID_MASK = 0xFFF0; // System-Menu: Maske |
|
|
|
static char * STR_DRUCKEN = "Drucken..."; // System-Menu-Strings |
|
|
|
/* externals */ |
|
|
|
extern HINSTANCE hInst; /* Instanz der Applikation */ |
|
|
|
extern int WinLineWidth; /* Breite des Textfensters */ |
|
|
|
void WPRINT_PrintInit( HWND hwnd); /* Windows Drucker Init */ |
|
|
|
void WaitForIdle(void); /* Warte, bis keine Events da */ |
|
|
|
|
|
|
|
/* lokale Variablen */ |
|
|
|
static int IsRegistered = 0; /* 1 wenn Fensterkl. reg. */ |
|
|
|
#define NumWinColors 23 /* vordef. Farben */ |
|
|
|
static COLORREF ColorTable[NumWinColors]; /* Speicher fuer die Farben */ |
|
|
|
static char * WindowName = "Spice Plot"; /* Fenstername */ |
|
|
|
static WNDCLASS TheWndClass; /* Plot-Fensterklasse */ |
|
|
|
static HFONT PlotFont; /* Font-Merker */ |
|
|
|
#define ID_DRUCKEN 0xEFF0 /* System-Menu: drucken */ |
|
|
|
#define ID_DRUCKEINR 0xEFE0 /* System-Menu: Druckereinrichtung */ |
|
|
|
static const int ID_MASK = 0xFFF0; /* System-Menu: Maske */ |
|
|
|
static char * STR_DRUCKEN = "Drucken..."; /* System-Menu-Strings */ |
|
|
|
static char * STR_DRUCKEINR = "Druckereinrichtung..."; |
|
|
|
|
|
|
|
/****************************************************************************** |
|
|
|
@ -78,45 +81,45 @@ WIN_Init() macht noch kein Fenster auf, dies geschieht erst in WIN_NewViewport() |
|
|
|
|
|
|
|
int WIN_Init( ) |
|
|
|
{ |
|
|
|
// Initialisierungen des Display-Descriptors |
|
|
|
/* Initialisierungen des Display-Descriptors */ |
|
|
|
dispdev->width = GetSystemMetrics( SM_CXSCREEN); |
|
|
|
dispdev->height = GetSystemMetrics( SM_CYSCREEN); |
|
|
|
dispdev->numlinestyles = 5; // siehe Auswirkungen in WinPrint! |
|
|
|
dispdev->numlinestyles = 5; /* siehe Auswirkungen in WinPrint! */ |
|
|
|
dispdev->numcolors = NumWinColors; |
|
|
|
|
|
|
|
// nur beim ersten Mal: |
|
|
|
/* nur beim ersten Mal: */ |
|
|
|
if (!IsRegistered) { |
|
|
|
|
|
|
|
// Farben initialisieren |
|
|
|
ColorTable[0] = RGB( 0, 0, 0); // Schwarz = Hintergrund |
|
|
|
ColorTable[1] = RGB(255,255,255); // Weisz = Beschriftung und Gitter |
|
|
|
ColorTable[2] = RGB( 0,255, 0); // Gruen = erste Linie |
|
|
|
ColorTable[3] = RGB(255, 0, 0); // Rot |
|
|
|
ColorTable[4] = RGB( 0, 0,255); // Blau |
|
|
|
ColorTable[5] = RGB(255,255, 0); // Gelb |
|
|
|
ColorTable[6] = RGB(255, 0,255); // Violett |
|
|
|
ColorTable[7] = RGB( 0,255,255); // Azur |
|
|
|
ColorTable[8] = RGB(255,128, 0); // Orange |
|
|
|
ColorTable[9] = RGB(128, 64, 0); // braun |
|
|
|
ColorTable[10]= RGB(128, 0,255); // Hellviolett |
|
|
|
ColorTable[11]= RGB(255,128,128); // Rosa |
|
|
|
// 2. Farb-Bank (mit anderem Linientyp |
|
|
|
ColorTable[12]= RGB(255,255,255); // Weisz |
|
|
|
ColorTable[13]= RGB( 0,255, 0); // Gruen |
|
|
|
ColorTable[14]= RGB(255, 0, 0); // Rot |
|
|
|
ColorTable[15]= RGB( 0, 0,255); // Blau |
|
|
|
ColorTable[16]= RGB(255,255, 0); // Gelb |
|
|
|
ColorTable[17]= RGB(255, 0,255); // Violett |
|
|
|
ColorTable[18]= RGB( 0,255,255); // Azur |
|
|
|
ColorTable[19]= RGB(255,128, 0); // Orange |
|
|
|
ColorTable[20]= RGB(128, 64, 0); // braun |
|
|
|
ColorTable[21]= RGB(128, 0,255); // Hellviolett |
|
|
|
ColorTable[22]= RGB(255,128,128); // Rosa |
|
|
|
|
|
|
|
// Ansii fixed font |
|
|
|
/* Farben initialisieren */ |
|
|
|
ColorTable[0] = RGB( 0, 0, 0); /* Schwarz = Hintergrund */ |
|
|
|
ColorTable[1] = RGB(255,255,255); /* Weisz = Beschriftung und Gitter */ |
|
|
|
ColorTable[2] = RGB( 0,255, 0); /* Gruen = erste Linie */ |
|
|
|
ColorTable[3] = RGB(255, 0, 0); /* Rot */ |
|
|
|
ColorTable[4] = RGB( 0, 0,255); /* Blau */ |
|
|
|
ColorTable[5] = RGB(255,255, 0); /* Gelb */ |
|
|
|
ColorTable[6] = RGB(255, 0,255); /* Violett */ |
|
|
|
ColorTable[7] = RGB( 0,255,255); /* Azur */ |
|
|
|
ColorTable[8] = RGB(255,128, 0); /* Orange */ |
|
|
|
ColorTable[9] = RGB(128, 64, 0); /* braun */ |
|
|
|
ColorTable[10]= RGB(128, 0,255); /* Hellviolett */ |
|
|
|
ColorTable[11]= RGB(255,128,128); /* Rosa */ |
|
|
|
/* 2. Farb-Bank (mit anderem Linientyp */ |
|
|
|
ColorTable[12]= RGB(255,255,255); /* Weisz */ |
|
|
|
ColorTable[13]= RGB( 0,255, 0); /* Gruen */ |
|
|
|
ColorTable[14]= RGB(255, 0, 0); /* Rot */ |
|
|
|
ColorTable[15]= RGB( 0, 0,255); /* Blau */ |
|
|
|
ColorTable[16]= RGB(255,255, 0); /* Gelb */ |
|
|
|
ColorTable[17]= RGB(255, 0,255); /* Violett */ |
|
|
|
ColorTable[18]= RGB( 0,255,255); /* Azur */ |
|
|
|
ColorTable[19]= RGB(255,128, 0); /* Orange */ |
|
|
|
ColorTable[20]= RGB(128, 64, 0); /* braun */ |
|
|
|
ColorTable[21]= RGB(128, 0,255); /* Hellviolett */ |
|
|
|
ColorTable[22]= RGB(255,128,128); /* Rosa */ |
|
|
|
|
|
|
|
/* Ansii fixed font */ |
|
|
|
PlotFont = GetStockFont( ANSI_FIXED_FONT); |
|
|
|
|
|
|
|
// Fensterklasse registrieren |
|
|
|
/* Fensterklasse registrieren */ |
|
|
|
TheWndClass.lpszClassName = WindowName; |
|
|
|
TheWndClass.hInstance = hInst; |
|
|
|
TheWndClass.lpfnWndProc = PlotWindowProc; |
|
|
|
@ -131,18 +134,18 @@ int WIN_Init( ) |
|
|
|
} |
|
|
|
IsRegistered = 1; |
|
|
|
|
|
|
|
// fertig |
|
|
|
/* fertig */ |
|
|
|
return (0); |
|
|
|
} |
|
|
|
|
|
|
|
// Zeiger auf den Graphen gewinnen |
|
|
|
// (wird an das Fenster angehaengt) |
|
|
|
/* Zeiger auf den Graphen gewinnen */ |
|
|
|
/* (wird an das Fenster angehaengt) */ |
|
|
|
static GRAPH * pGraph( HWND hwnd) |
|
|
|
{ |
|
|
|
return (GRAPH *) GetWindowLong( hwnd, 0); |
|
|
|
} |
|
|
|
|
|
|
|
// Linientyp zurueckgeben zum Zeichnen |
|
|
|
/* Linientyp zurueckgeben zum Zeichnen */ |
|
|
|
static int LType( int ColorIndex) |
|
|
|
{ |
|
|
|
if (ColorIndex >= 12) |
|
|
|
@ -151,68 +154,68 @@ static int LType( int ColorIndex) |
|
|
|
return PS_SOLID; |
|
|
|
} |
|
|
|
|
|
|
|
// Drucke ein Plotfenster |
|
|
|
// Aufruf durch SystemMenue / Drucken |
|
|
|
/* Drucke ein Plotfenster */ |
|
|
|
/* Aufruf durch SystemMenue / Drucken */ |
|
|
|
LRESULT PrintPlot( HWND hwnd) |
|
|
|
{ |
|
|
|
GRAPH * graph; |
|
|
|
GRAPH * temp; |
|
|
|
|
|
|
|
// Zeiger auf die Grafik holen |
|
|
|
/* Zeiger auf die Grafik holen */ |
|
|
|
graph = pGraph( hwnd); |
|
|
|
if (!graph) return 0; |
|
|
|
|
|
|
|
// Umschalten auf den Drucker |
|
|
|
// (hat WPRINT_Init() zur Folge) |
|
|
|
/* Umschalten auf den Drucker */ |
|
|
|
/* (hat WPRINT_Init() zur Folge) */ |
|
|
|
if (DevSwitch("WinPrint")) return 0; |
|
|
|
|
|
|
|
// Cursor = warten |
|
|
|
/* Cursor = warten */ |
|
|
|
SetCursor( LoadCursor( NULL, IDC_WAIT)); |
|
|
|
|
|
|
|
// Graphen kopieren |
|
|
|
/* Graphen kopieren */ |
|
|
|
temp = CopyGraph(graph); |
|
|
|
if (!temp) goto PrintEND; |
|
|
|
|
|
|
|
// in die Kopie die neuen Daten des Druckers einspeisen |
|
|
|
/* in die Kopie die neuen Daten des Druckers einspeisen */ |
|
|
|
if (NewViewport(temp)) goto PrintEND2; |
|
|
|
|
|
|
|
// Lage des Gitters korrigieren (Kopie aus gr_init) |
|
|
|
/* Lage des Gitters korrigieren (Kopie aus gr_init) */ |
|
|
|
temp->viewportxoff = temp->fontwidth * 8; |
|
|
|
temp->viewportyoff = temp->fontheight * 4; |
|
|
|
|
|
|
|
// dies druckt den Graphen |
|
|
|
/* dies druckt den Graphen */ |
|
|
|
gr_resize(temp); |
|
|
|
|
|
|
|
PrintEND2: |
|
|
|
// temp. Graphen loeschen |
|
|
|
/* temp. Graphen loeschen */ |
|
|
|
DestroyGraph(temp->graphid); |
|
|
|
|
|
|
|
PrintEND: |
|
|
|
// zurueckschalten auf den Bildschirm |
|
|
|
/* zurueckschalten auf den Bildschirm */ |
|
|
|
DevSwitch(NULL); |
|
|
|
|
|
|
|
// Cursor = normal |
|
|
|
/* Cursor = normal */ |
|
|
|
SetCursor( LoadCursor( NULL, IDC_ARROW)); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
// Druckerinitialisierung |
|
|
|
/* Druckerinitialisierung */ |
|
|
|
LRESULT PrintInit( HWND hwnd) |
|
|
|
{ |
|
|
|
// weitergeben an das Drucker-Modul |
|
|
|
/* weitergeben an das Drucker-Modul */ |
|
|
|
WPRINT_PrintInit(hwnd); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
// Fensterprozedur |
|
|
|
/* Fensterprozedur */ |
|
|
|
LRESULT CALLBACK PlotWindowProc( HWND hwnd, |
|
|
|
UINT uMsg, WPARAM wParam, LPARAM lParam) |
|
|
|
{ |
|
|
|
switch (uMsg) { |
|
|
|
case WM_SYSCOMMAND: |
|
|
|
{ |
|
|
|
// Kommando testen |
|
|
|
/* Kommando testen */ |
|
|
|
int cmd = wParam & ID_MASK; |
|
|
|
switch(cmd) { |
|
|
|
case ID_DRUCKEN: return PrintPlot( hwnd); |
|
|
|
@ -221,7 +224,7 @@ LRESULT CALLBACK PlotWindowProc( HWND hwnd, |
|
|
|
} |
|
|
|
goto WIN_DEFAULT; |
|
|
|
|
|
|
|
case WM_CLOSE: // Fenster schlieszen |
|
|
|
case WM_CLOSE: /* Fenster schlieszen */ |
|
|
|
{ |
|
|
|
GRAPH * g = pGraph( hwnd); |
|
|
|
if (g) |
|
|
|
@ -229,40 +232,40 @@ LRESULT CALLBACK PlotWindowProc( HWND hwnd, |
|
|
|
} |
|
|
|
goto WIN_DEFAULT; |
|
|
|
|
|
|
|
case WM_PAINT: // Fenster neuzeichnen (z.B. nach Resize) |
|
|
|
case WM_PAINT: /* Fenster neuzeichnen (z.B. nach Resize) */ |
|
|
|
{ |
|
|
|
PAINTSTRUCT ps; |
|
|
|
GRAPH * g; |
|
|
|
tpWindowData wd; |
|
|
|
HDC saveDC; // der DC aus BeginPaint ist anders... |
|
|
|
HDC saveDC; /* der DC aus BeginPaint ist anders... */ |
|
|
|
HDC newDC; |
|
|
|
|
|
|
|
// muss passieren |
|
|
|
/* muss passieren */ |
|
|
|
newDC = BeginPaint( hwnd, &ps); |
|
|
|
g = pGraph( hwnd); |
|
|
|
if (g) { |
|
|
|
wd = pWindowData(g); |
|
|
|
if (wd) { |
|
|
|
if (!wd->PaintFlag && !wd->FirstFlag) { |
|
|
|
// rekursiven Aufruf verhindern |
|
|
|
/* rekursiven Aufruf verhindern */ |
|
|
|
wd->PaintFlag = 1; |
|
|
|
// Fenstermasze holen |
|
|
|
/* Fenstermasze holen */ |
|
|
|
GetClientRect( hwnd, &(wd->Area)); |
|
|
|
g->absolute.width = wd->Area.right; |
|
|
|
g->absolute.height = wd->Area.bottom; |
|
|
|
// DC umschalten |
|
|
|
/* DC umschalten */ |
|
|
|
saveDC = wd->hDC; |
|
|
|
wd->hDC = newDC; |
|
|
|
// neu zeichnen |
|
|
|
/* neu zeichnen */ |
|
|
|
gr_resize(g); |
|
|
|
// DC umschalten |
|
|
|
/* DC umschalten */ |
|
|
|
wd->hDC = saveDC; |
|
|
|
// fertig |
|
|
|
/* fertig */ |
|
|
|
wd->PaintFlag = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// beenden |
|
|
|
/* beenden */ |
|
|
|
EndPaint( hwnd, &ps); |
|
|
|
} |
|
|
|
return 0; |
|
|
|
@ -286,27 +289,27 @@ int WIN_NewViewport( GRAPH * graph) |
|
|
|
int i; |
|
|
|
HWND window; |
|
|
|
HDC dc; |
|
|
|
HDC textDC; |
|
|
|
HFONT font; |
|
|
|
/* HDC textDC; */ |
|
|
|
/* HFONT font; */ |
|
|
|
TEXTMETRIC tm; |
|
|
|
tpWindowData wd; |
|
|
|
HMENU sysmenu; |
|
|
|
|
|
|
|
// Parameter testen |
|
|
|
/* Parameter testen */ |
|
|
|
if (!graph) return 1; |
|
|
|
|
|
|
|
// Initialisiere, falls noch nicht geschehen |
|
|
|
/* Initialisiere, falls noch nicht geschehen */ |
|
|
|
if (WIN_Init() != 0) { |
|
|
|
externalerror("Can't initialize GDI."); |
|
|
|
return(1); |
|
|
|
} |
|
|
|
|
|
|
|
// Device dep. Info allocieren |
|
|
|
/* Device dep. Info allocieren */ |
|
|
|
wd = calloc(1, sizeof(tWindowData)); |
|
|
|
if (!wd) return 1; |
|
|
|
graph->devdep = (char *)wd; |
|
|
|
|
|
|
|
// Create the window |
|
|
|
/* Create the window */ |
|
|
|
i = GetSystemMetrics( SM_CYSCREEN) / 3; |
|
|
|
window = CreateWindow( WindowName, graph->plotname, WS_OVERLAPPEDWINDOW, |
|
|
|
0, 0, WinLineWidth, i * 2 - 22, NULL, NULL, hInst, NULL); |
|
|
|
@ -314,56 +317,56 @@ int WIN_NewViewport( GRAPH * graph) |
|
|
|
wd->wnd = window; |
|
|
|
SetWindowLong( window, 0, (long)graph); |
|
|
|
|
|
|
|
// Zeige das Fenster |
|
|
|
/* Zeige das Fenster */ |
|
|
|
ShowWindow( window, SW_SHOWNORMAL); |
|
|
|
|
|
|
|
// Hole die Masze |
|
|
|
/* Hole die Masze */ |
|
|
|
GetClientRect( window, &(wd->Area)); |
|
|
|
|
|
|
|
// Hole den DC |
|
|
|
/* Hole den DC */ |
|
|
|
dc = GetDC( window); |
|
|
|
wd->hDC = dc; |
|
|
|
|
|
|
|
// Setze den Color-Index |
|
|
|
/* Setze den Color-Index */ |
|
|
|
wd->ColorIndex = 0; |
|
|
|
|
|
|
|
// noch kein Zeichnen |
|
|
|
/* noch kein Zeichnen */ |
|
|
|
wd->PaintFlag = 0; |
|
|
|
wd->FirstFlag = 1; |
|
|
|
|
|
|
|
// System-Menu modifizieren |
|
|
|
/* System-Menu modifizieren */ |
|
|
|
sysmenu = GetSystemMenu( window, FALSE); |
|
|
|
AppendMenu( sysmenu, MF_SEPARATOR, 0, NULL); |
|
|
|
AppendMenu( sysmenu, MF_STRING, ID_DRUCKEN, STR_DRUCKEN); |
|
|
|
AppendMenu( sysmenu, MF_STRING, ID_DRUCKEINR, STR_DRUCKEINR); |
|
|
|
|
|
|
|
// Default-Parameter des DC setzen |
|
|
|
/* Default-Parameter des DC setzen */ |
|
|
|
SetBkColor( dc, ColorTable[0]); |
|
|
|
SetBkMode( dc, TRANSPARENT ); |
|
|
|
|
|
|
|
// Font setzen |
|
|
|
/* Font setzen */ |
|
|
|
SelectObject( dc, PlotFont); |
|
|
|
|
|
|
|
// Font-Parameter abfragen |
|
|
|
/* Font-Parameter abfragen */ |
|
|
|
if (GetTextMetrics( dc, &tm)) { |
|
|
|
graph->fontheight = tm.tmHeight; |
|
|
|
graph->fontwidth = tm.tmAveCharWidth; |
|
|
|
} |
|
|
|
|
|
|
|
// Viewport-Parameter setzen |
|
|
|
/* Viewport-Parameter setzen */ |
|
|
|
graph->viewport.height = wd->Area.bottom; |
|
|
|
graph->viewport.width = wd->Area.right; |
|
|
|
|
|
|
|
// Absolut-Parameter setzen |
|
|
|
/* Absolut-Parameter setzen */ |
|
|
|
graph->absolute.xpos = 0; |
|
|
|
graph->absolute.ypos = 0; |
|
|
|
graph->absolute.width = wd->Area.right; |
|
|
|
graph->absolute.height = wd->Area.bottom; |
|
|
|
|
|
|
|
// Warten, bis das Fenster wirklich da ist |
|
|
|
/* Warten, bis das Fenster wirklich da ist */ |
|
|
|
WaitForIdle(); |
|
|
|
|
|
|
|
// fertig |
|
|
|
/* fertig */ |
|
|
|
return(0); |
|
|
|
} |
|
|
|
|
|
|
|
@ -381,7 +384,7 @@ int WIN_Close() |
|
|
|
|
|
|
|
void RealClose(void) |
|
|
|
{ |
|
|
|
// Fensterklasse loeschen |
|
|
|
/* Fensterklasse loeschen */ |
|
|
|
if (IsRegistered) { |
|
|
|
if (TheWndClass.hIcon) { |
|
|
|
DestroyIcon( TheWndClass.hIcon); |
|
|
|
@ -400,8 +403,8 @@ int WIN_Clear() |
|
|
|
wd = pWindowData(currentgraph); |
|
|
|
if (!wd) return 0; |
|
|
|
|
|
|
|
// das macht das Fenster selbst |
|
|
|
if (!wd->PaintFlag) // bei WM_PAINT unnoetig |
|
|
|
/* das macht das Fenster selbst */ |
|
|
|
if (!wd->PaintFlag) /* bei WM_PAINT unnoetig */ |
|
|
|
SendMessage( wd->wnd, WM_ERASEBKGND, (WPARAM) wd->hDC, 0); |
|
|
|
|
|
|
|
return 0; |
|
|
|
@ -461,7 +464,7 @@ int WIN_Arc(int x0, int y0, int radius, double theta1, double theta2) |
|
|
|
} |
|
|
|
SetArcDirection( wd->hDC, direction); |
|
|
|
|
|
|
|
// Geometrische Vorueberlegungen |
|
|
|
/* Geometrische Vorueberlegungen */ |
|
|
|
yb = wd->Area.bottom; |
|
|
|
left = x0 - radius; |
|
|
|
right = x0 + radius; |
|
|
|
@ -476,7 +479,7 @@ int WIN_Arc(int x0, int y0, int radius, double theta1, double theta2) |
|
|
|
xe = (dx0 + (r * cos(theta2))); |
|
|
|
ye = (dy0 + (r * sin(theta2))); |
|
|
|
|
|
|
|
// Zeichnen |
|
|
|
/* Zeichnen */ |
|
|
|
NewPen = CreatePen( LType(wd->ColorIndex), 0, ColorTable[wd->ColorIndex] ); |
|
|
|
OldPen = SelectObject(wd->hDC, NewPen); |
|
|
|
Arc( wd->hDC, left, yb-top, right, yb-bottom, xs, yb-ys, xe, yb-ye); |
|
|
|
@ -502,19 +505,19 @@ int WIN_Text( char * text, int x, int y, int degrees) |
|
|
|
|
|
|
|
int WIN_DefineColor(int red, int green, int blue, int num) |
|
|
|
{ |
|
|
|
// nix |
|
|
|
/* nix */ |
|
|
|
return (0); |
|
|
|
} |
|
|
|
|
|
|
|
int WIN_DefineLinestyle(int num, int mask) |
|
|
|
{ |
|
|
|
// nix |
|
|
|
/* nix */ |
|
|
|
return (0); |
|
|
|
} |
|
|
|
|
|
|
|
int WIN_SetLinestyle(int style) |
|
|
|
{ |
|
|
|
// nix |
|
|
|
/* nix */ |
|
|
|
return (0); |
|
|
|
} |
|
|
|
|
|
|
|
@ -537,9 +540,9 @@ int WIN_Update() |
|
|
|
wd = pWindowData(currentgraph); |
|
|
|
if (!wd) return 0; |
|
|
|
|
|
|
|
// Nach dem ersten absolvieren von Update() werden durch |
|
|
|
// FirstFlag wieder WM_PAINT-Botschaften bearbeitet. |
|
|
|
// Dies verhindert doppeltes Zeichnen beim Darstellen des Fensters. |
|
|
|
/* Nach dem ersten absolvieren von Update() werden durch */ |
|
|
|
/* FirstFlag wieder WM_PAINT-Botschaften bearbeitet. */ |
|
|
|
/* Dies verhindert doppeltes Zeichnen beim Darstellen des Fensters. */ |
|
|
|
wd->FirstFlag = 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|