|
My Programming Page - PMFILTER
|
PMFILTER
Contents of this page
- PMFILTER.C, Main Program Module, Main Window Procedure, Options Notebook Dialog Window Procedure
PMFILTER.C
/*********************************************************************
* *
* MODUL NAME : pmfilter.c AUTOR: Tom Wellige *
* ERSTELLT AM: 04.10.94 *
* *
* COPYRIGHT (C) in 1994,95 BY TOM WELLIGE *
* Zu Lernzwecken ausdrcklich freigegeben !!! *
* *
* MODUL-BESCHREIBUNG: *
* *
* Programm-Modul fr PMFILTER.EXE . *
* Ein Programm zur grafischen Anzeige von analogen Filtern. *
* *
*********************************************************************/
// ************************************************************************
// Definitionen fr die Kompilation der einzelnen INCLUDE-Dateien
// ************************************************************************
#define INCL_WIN
#define INCL_GPI
#define INCL_DOS
// ************************************************************************
// Headerdateien
// ************************************************************************
#include <os2.h> // Defs fr OS/2 Programme
#include <stdarg.h> // Parameterliste fr Funktionen
#include "string.h" // String-Funktionen
#include "pmfilter.h" // allgemeine Defs zu PMFILTER
#include "dialog.h" // Defs zu Dialogen
#include "button.h" // Defs zur Schalterleiste
#include "notebook.h" // Defs zu Notebook z.B. Filter 1 bearbeiten
#include "filter.h" // Defs fr Filterkoeffizienten
#include "bessel.h" // Filterkoeffizienten fr Besselfilter
#include "butter.h" // Filterkoeffizienten fr Butterworthfilter
#include "tscheb3.h" // Filterkoeffizienten fr Tschebyscheff-Filter
// mit 3dB Welligkeit
#include "tscheb05.h" // Filterkoeffizienten fr Tschebyscheff-Filter
// mit 0,5dB Welligkeit
// ************************************************************************
// Funktionsprototypen Fensterprozeduren
// ************************************************************************
// "Hauptprogramm" Prozedur
MRESULT EXPENTRY ClientWndProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
// "šber PMFilter..." Dialog Prozedur
MRESULT EXPENTRY AboutDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
// "Bearbeiten..." Dialog Prozedur + Notizbuchseiten
MRESULT EXPENTRY BearbDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
MRESULT EXPENTRY TypDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
MRESULT EXPENTRY CharDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
MRESULT EXPENTRY ParamDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
MRESULT EXPENTRY DarstDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
// ************************************************************************
// Funktionen, die die einzelnen Fensterprozeduren verwenden
// ************************************************************************
// ClientWndProc: Schalterleiste einfgen bzw. anpassen
static VOID SetUpToolBar ( HWND hwnd, HPS hps, USHORT cx, USHORT cy);
// ClientWndProc: Fenster l”schen
static VOID ClearBackGround ( HPS hps, USHORT cx, USHORT cy, BOOL monitor);
// ClientWndProc: Koordinatenkreuz und Beschriftung
static VOID DrawBode ( HPS hps, USHORT cx, USHORT cy, BOOL monitor);
// ClientWndProc: Filtereinstellungen anzeigen
static VOID DrawParameters ( HPS hps, USHORT cx, USHORT cy, BOOL monitor);
// DrawParamters: String erzeugen
static PSZ GetPSZ( PSZ szFormat, ... );
// BearbDlgProc: Seiten in Notizbuch einfgen
static BOOL SetUpPage ( HWND hwndNB, HWND hwnd, PVOID data,
INT iArrayIndex );
// BearbDlgProc: GrӇe der Tabulatoren einstellen
static BOOL SetTabDimensions ( HWND hwndNB );
// BearbDlgProc: ermittelt die GrӇe eines Strings
static INT GetStringSize ( HPS hps, HWND hwndNB, PSZ szString);
// ************************************************************************
// weitere Programmfunktionen
// ************************************************************************
// ”ffnet FileDialog und l„dt Filter-Structur
static VOID FilterLaden ( HWND hwnd );
// ”ffnet FileDialog und speichert Filter-Structur
static VOID FilterSpeichern ( HWND hwnd );
// ”ffnet Infobox mit Text
static VOID Msg ( PSZ szFormat, ... );
// ************************************************************************
// Globale Variablen
// ************************************************************************
NBPAGE nbpage[] = // Informationen zu Notizbuchseiten
{
{TypDlgProc, NULLHANDLE, "~Typ", 0L, ID_Typ },
{CharDlgProc, NULLHANDLE, "~Charakteristik", 0L, ID_Charakter },
{ParamDlgProc, NULLHANDLE, "~Parameter", 0L, ID_Parameter },
{DarstDlgProc, NULLHANDLE, "~Darstellung", 0L, ID_Darstellung }
};
#define PAGE_COUNT (sizeof( nbpage ) / sizeof( NBPAGE ))
CHAR FilterName[CCHMAXPATH]; // Dateiname mit Filtereinstlg.
HWND hwndClientFrame; // Handle auf Rahmen des
// Programmfensters
// (um Titelzeile zu „ndern)
// ************************************************************************
// Main
// Bemerkung: C Hauptprogramm
// ************************************************************************
INT main(VOID)
{
HAB hab; // Handle auf Anchor-Block
HMQ hmq; // Handle auf Message-Queue
QMSG qmsg; // aufgelaufene Message
HWND hwndClient; // Handle auf Programm-Fenster
ULONG FrameCreationFlags =
FCF_TITLEBAR | // Titelzeile
FCF_SYSMENU | // Systemmen
FCF_SIZEBORDER | // gr”áenver„nderbarer Rahmen
FCF_MINMAX | // Button Min-Max
FCF_SHELLPOSITION | // WPS legt Position fest
FCF_TASKLIST | // in Tasklist aufnehmen
FCF_ICON | // besitzt eigenen Icon
FCF_MENU | // besitzt Men
FCF_ACCELTABLE; // besitzt Schnellwahltasten
hab = WinInitialize (0); // Programm-Anchor-Block holen
hmq = WinCreateMsgQueue (hab,0); // Message-Queue installieren
WinRegisterClass (hab, // Fenster registrieren
"Hauptfenster", // Name des Fensters
ClientWndProc, // Fensterprozedur des Fensters
CS_SIZEREDRAW,
0);
hwndClientFrame = WinCreateStdWindow (HWND_DESKTOP,
0L, // Fenter ”ffnen
&FrameCreationFlags,
"Hauptfenster", // Name des Fensters
"PMFilter - Simulationsprogramm fr analoge Filter",
WS_VISIBLE, // Titelzeile, sichtbar
(HMODULE)0,
ID_ClientWindow,
&hwndClient);
WinSetWindowPos (hwndClientFrame, 0L, // Fenster beim ™ffnen
0,0, 0,0, // in maximaler GrӇe anzeigen
SWP_MAXIMIZE | SWP_SHOW);
while (WinGetMsg (hab,&qmsg,0L,0,0)) // solange Nachrichten auflaufen
WinDispatchMsg (hab,&qmsg); // bearbeite diese
WinDestroyWindow (hwndClientFrame); // Fenster schlieáen
WinDestroyMsgQueue (hmq); // Message-Queue l”schen
WinTerminate (hab); // Programm-Anchor-Block l”schen
return 0;
}
// ************************************************************************
// FENSTERPROZEDUREN
// ************************************************************************
// ************************************************************************
// ClientWndProc
// Bemerkung: Hauptprogramm-Prozedur
// ************************************************************************
MRESULT EXPENTRY ClientWndProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
HPS hps;
static USHORT cxClient, cyClient;
switch (msg)
{
case WM_SIZE: // FenstergrӇe ermitteln
cxClient = SHORT1FROMMP (mp2);
cyClient = SHORT2FROMMP (mp2);
return (MRESULT) FALSE;
case WM_PAINT: // Grafikausgabe
hps = WinBeginPaint (hwnd, NULLHANDLE, NULL);
SetUpToolBar (hwnd, hps, cxClient, cyClient);
ClearBackGround (hps, cxClient, cyClient, TRUE);
DrawBode (hps, cxClient, cyClient, TRUE);
DrawParameters (hps, cxClient, cyClient, TRUE);
WinEndPaint ( hps );
return (MRESULT) FALSE;
case WM_COMMAND: // Befehl in mp1 ausfhren
switch (SHORT1FROMMP (mp1))
{
case IDM_Filter_Laden: // Aufruf ber Men
case IDB_Load: // Aufruf ber Schalterleiste
FilterLaden( hwnd ); // Filtereinstellg. laden
WinInvalidateRect (hwnd,NULL,FALSE);
return (MRESULT) FALSE;
case IDM_Filter_Speichern: // Filtereinstellg. sichern
case IDB_Save:
FilterSpeichern( hwnd );
return (MRESULT) FALSE;
case IDM_Filter_Quit: // Programm beenden
case IDB_Exit:
if ( WinMessageBox(HWND_DESKTOP,
hwnd,
"Programm wirklich beenden ?", "PMFilter",
0, MB_YESNO | MB_ICONQUESTION | MB_MOVEABLE )
== MBID_YES)
WinPostMsg (hwnd,WM_QUIT,(MPARAM)0,(MPARAM)0);
return (MRESULT) FALSE;
case IDM_Bearbeiten_Filter1: // Filtereinstellg. bearbeiten
case IDB_Filter1:
WinDlgBox (HWND_DESKTOP,
hwnd,
BearbDlgProc,
(HMODULE) 0,
ID_FilterDialog,
&(fdata[0]) );
WinInvalidateRect (hwnd,NULL,FALSE);
return (MRESULT) FALSE;
case IDM_Bearbeiten_Filter2: // Filtereinstellg. bearbeiten
case IDB_Filter2:
WinDlgBox (HWND_DESKTOP,
hwnd,
BearbDlgProc,
(HMODULE) 0,
ID_FilterDialog,
&(fdata[1]) );
WinInvalidateRect (hwnd,NULL,FALSE);
return (MRESULT) FALSE;
case IDM_Bearbeiten_Filter3: // Filtereinstellg. bearbeiten
case IDB_Filter3:
WinDlgBox (HWND_DESKTOP,
hwnd,
BearbDlgProc,
(HMODULE) 0,
ID_FilterDialog,
&(fdata[2]) );
WinInvalidateRect (hwnd,NULL,FALSE);
return (MRESULT) FALSE;
case IDM_Bearbeiten_Filter4: // Filtereinstellg. bearbeiten
case IDB_Filter4:
WinDlgBox (HWND_DESKTOP,
hwnd,
BearbDlgProc,
(HMODULE) 0,
ID_FilterDialog,
&(fdata[3]) );
WinInvalidateRect (hwnd,NULL,FALSE);
return (MRESULT) FALSE;
case IDM_Help_About: // About Dlg ”ffnen
case IDB_Info:
WinDlgBox (HWND_DESKTOP,
hwnd,
AboutDlgProc,
(HMODULE) 0,
ID_About,
NULL);
return (MRESULT) FALSE;
}
case WM_PRESPARAMCHANGED: // Anwender „ndert Schriftart
WinInvalidateRect (hwnd,NULL,FALSE);
return (MRESULT) FALSE;
case WM_CLOSE: // Programm beednen
WinPostMsg (hwnd,WM_QUIT,(MPARAM)0,(MPARAM)0);
return (MRESULT) FALSE;
default: // Default-WindowProc
return WinDefWindowProc (hwnd,msg,mp1,mp2);
}
return (MRESULT)FALSE;
}
// ************************************************************************
// BearbDlgProc
// Bemerkung: Filter Bearbeiten... Notizbuch Dialog
// ************************************************************************
MRESULT EXPENTRY BearbDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
static FDATA tempdata;
PVOID data;
PFDATA pfdata;
static HWND hwndNB;
PSZ szTitle;
ULONG ZeileSpalte;
SHORT Zeile, Spalte, Ueberlagerung;
HWND hwndText;
CHAR szAmplitude[15];
CHAR szGrenz[15];
CHAR szUFrequenz[15];
CHAR szOFrequenz[15];
CHAR *endptr;
BOOL cvError;
switch (msg)
{
case WM_INITDLG: // Dialoginitialisierung
{
INT i;
data = (PVOID) mp2;
pfdata = (PFDATA) data;
tempdata = (*pfdata);
switch (tempdata.Nummer) // Titel anpassen
{
case 1: szTitle = "Filter Nr.1 bearbeiten"; break;
case 2: szTitle = "Filter Nr.2 bearbeiten"; break;
case 3: szTitle = "Filter Nr.3 bearbeiten"; break;
case 4: szTitle = "Filter Nr.4 bearbeiten"; break;
}
WinSetWindowText(hwnd, szTitle);
hwndNB = WinWindowFromID (hwnd, ID_FilterDialog_Book);
WinSendMsg( hwndNB, BKM_SETNOTEBOOKCOLORS, // Hintergrundfarbe
MPFROMLONG( SYSCLR_FIELDBACKGROUND ),
MPFROMSHORT( BKA_BACKGROUNDPAGECOLORINDEX ));
SetTabDimensions( hwndNB ); // Tab-GrӇe anpassen
for( i = 0; i < PAGE_COUNT ; i++ ) // Seiten einfgen
SetUpPage( hwndNB, hwnd, (PVOID) &tempdata, i );
return (MRESULT)FALSE;
}
case WM_COMMAND: // Befehl in mp1 ausfhren
switch (SHORT1FROMMP (mp1))
{
case ID_FilterDialog_Ok:
// Daten vom Typ-Dlg abfragen
// GrundTyp-Button
tempdata.Typ =
WinSendDlgItemMsg((HWND)nbpage[0].hwndDlg,
ID_GrundBtn,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? fltGrundTyp : fltUeberlag;
// Typ-Valueset abfragen
ZeileSpalte = (ULONG)
WinSendDlgItemMsg((HWND)nbpage[0].hwndDlg,
ID_TypSet,
VM_QUERYSELECTEDITEM,
NULLHANDLE,
NULL);
tempdata.Grundtyp = (USHORT) SHORT2FROMMR(ZeileSpalte);
if (
(tempdata.Grundtyp == 0 ) ||
(tempdata.Grundtyp == fltBP ) ||
(tempdata.Grundtyp == fltBS )
)
{
cvError = TRUE;
WinSendMsg( hwndNB,
BKM_TURNTOPAGE,
(MPARAM) nbpage[0].pageId,
NULL);
WinMessageBox( HWND_DESKTOP, HWND_DESKTOP,
"Bandpass und Bandsperre werden in dieser "
"Programmversion noch nicht untersttzt.",
"Hinweis", 1, MB_OK | MB_MOVEABLE | MB_ERROR );
}
// šberlagerungs-Checkboxes
tempdata.MulMitFlt1 =
WinSendDlgItemMsg((HWND)nbpage[0].hwndDlg,
ID_Ueberlag1Btn,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? (BOOL) TRUE : (BOOL) FALSE;
tempdata.MulMitFlt2 =
WinSendDlgItemMsg((HWND)nbpage[0].hwndDlg,
ID_Ueberlag2Btn,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? (BOOL) TRUE : (BOOL) FALSE;
tempdata.MulMitFlt3 =
WinSendDlgItemMsg((HWND)nbpage[0].hwndDlg,
ID_Ueberlag3Btn,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? (BOOL) TRUE : (BOOL) FALSE;
tempdata.MulMitFlt4 =
WinSendDlgItemMsg((HWND)nbpage[0].hwndDlg,
ID_Ueberlag4Btn,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? (BOOL) TRUE : (BOOL) FALSE;
// Aktiv-Checkbox
tempdata.Aktiv =
WinSendDlgItemMsg((HWND)nbpage[0].hwndDlg,
ID_AktivBtn,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? (BOOL) TRUE : (BOOL) FALSE;
// Charakter-Buttons
tempdata.Charakter =
WinSendDlgItemMsg((HWND)nbpage[1].hwndDlg,
ID_Bessel,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? fltBessel : tempdata.Charakter;
tempdata.Charakter =
WinSendDlgItemMsg((HWND)nbpage[1].hwndDlg,
ID_Butter,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? fltButter : tempdata.Charakter;
tempdata.Charakter =
WinSendDlgItemMsg((HWND)nbpage[1].hwndDlg,
ID_Tscheb05,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? fltTscheb05 : tempdata.Charakter;
tempdata.Charakter =
WinSendDlgItemMsg((HWND)nbpage[1].hwndDlg,
ID_Tscheb3,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? fltTscheb3 : tempdata.Charakter;
// Ordnung-Spinbutton
WinSendDlgItemMsg((HWND)nbpage[1].hwndDlg,
ID_Ordnung,
SPBM_QUERYVALUE,
(MPARAM) &(tempdata.Ordnung),
MPFROM2SHORT (0, SPBQ_ALWAYSUPDATE));
// Paramter Eingabezeilen
hwndText = WinWindowFromID ((HWND)nbpage[2].hwndDlg, ID_Amplitude);
WinQueryWindowText(hwndText, sizeof(szAmplitude), (PSZ)szAmplitude);
hwndText = WinWindowFromID ((HWND)nbpage[2].hwndDlg, ID_Grenz);
WinQueryWindowText(hwndText, sizeof(szGrenz), (PSZ)szGrenz);
hwndText = WinWindowFromID ((HWND)nbpage[2].hwndDlg, ID_UFrequenz);
WinQueryWindowText(hwndText, sizeof(szUFrequenz), (PSZ)szUFrequenz);
hwndText = WinWindowFromID ((HWND)nbpage[2].hwndDlg, ID_OFrequenz);
WinQueryWindowText(hwndText, sizeof(szOFrequenz), (PSZ)szOFrequenz);
cvError = FALSE;
// Strings wandeln, bei Fehler Notebook Seite in den Vordergrund
// holen, und Eingabezeile markieren.
tempdata.Verstaerkung = strtol(&szAmplitude, &endptr, 10);
if (
(tempdata.Verstaerkung == 0) &&
(PSZ)endptr == (PSZ)szAmplitude ||
((tempdata.Verstaerkung < -100) ||
(tempdata.Verstaerkung > 100))
)
{
cvError = TRUE;
WinSendMsg( hwndNB,
BKM_TURNTOPAGE,
(MPARAM) nbpage[2].pageId,
NULL);
hwndText = WinWindowFromID ((HWND)nbpage[2].hwndDlg, ID_Amplitude);
WinMessageBox( HWND_DESKTOP, HWND_DESKTOP,
"Ungltige Eingabe im Feld 'Verst„rkung A'. "
"Es sind nur ganze Zahlen zwischen -30 und +30 "
"gltig.",
"Fehler", 1, MB_OK | MB_MOVEABLE | MB_ERROR );
}
tempdata.Grenz = strtol(&szGrenz, &endptr, 10);
if (
(tempdata.Grenz == 0) &&
(PSZ)endptr == (PSZ)szGrenz ||
((tempdata.Grenz < 0) ||
(tempdata.Grenz > 100000000 ))
)
{
cvError = TRUE;
WinSendMsg( hwndNB,
BKM_TURNTOPAGE,
(MPARAM) nbpage[2].pageId,
NULL);
WinMessageBox( HWND_DESKTOP, HWND_DESKTOP,
"Ungltige Eingabe im Feld 'Grenzfrequenz fg'. "
"Es sind nur ganze Zahlen zwischen 0 und "
"100000000 (100MHz) gltig.",
"Fehler", 1, MB_OK | MB_MOVEABLE | MB_ERROR );
}
tempdata.FUnten = strtol(&szUFrequenz, &endptr, 10);
if (
(tempdata.FUnten == 0) &&
(PSZ)endptr == (PSZ)szUFrequenz ||
((tempdata.FUnten < 0) ||
(tempdata.FUnten > 100000000 ))
)
{
cvError = TRUE;
WinSendMsg( hwndNB,
BKM_TURNTOPAGE,
(MPARAM) nbpage[2].pageId,
NULL);
WinMessageBox( HWND_DESKTOP, HWND_DESKTOP,
"Ungltige Eingabe im Feld 'untere Eckfrequenz fu'. "
"Es sind nur ganze Zahlen zwischen 0 und "
"100000000 (100MHz) gltig.",
"Fehler", 1, MB_OK | MB_MOVEABLE | MB_ERROR );
}
tempdata.FOben = strtol(&szOFrequenz, &endptr, 10);
if (
(tempdata.FOben == 0) &&
(PSZ)endptr == (PSZ)szOFrequenz ||
((tempdata.FOben < 0) ||
(tempdata.FOben > 100000000 ))
)
{
cvError = TRUE;
WinSendMsg( hwndNB,
BKM_TURNTOPAGE,
(MPARAM) nbpage[2].pageId,
NULL);
WinMessageBox( HWND_DESKTOP, HWND_DESKTOP,
"Ungltige Eingabe im Feld 'obere Eckfrequenz fo'. "
"Es sind nur ganze Zahlen zwischen 0 und "
"100000000 (100MHz) gltig.",
"Fehler", 1, MB_OK | MB_MOVEABLE | MB_ERROR );
}
// Linienfarbe Valueset abfragen
ZeileSpalte = (ULONG)
WinSendDlgItemMsg((HWND)nbpage[3].hwndDlg,
ID_LinienFarbe,
VM_QUERYSELECTEDITEM,
NULLHANDLE,
NULL);
switch ( SHORT1FROMMR(ZeileSpalte) )
{
case 1:
switch ( SHORT2FROMMR(ZeileSpalte) )
{
case 1: tempdata.LinienFarbe = CLR_PALEGRAY ; break;
case 2: tempdata.LinienFarbe = CLR_BLUE ; break;
case 3: tempdata.LinienFarbe = CLR_GREEN ; break;
case 4: tempdata.LinienFarbe = CLR_CYAN ; break;
}
break;
case 2:
switch ( SHORT2FROMMR(ZeileSpalte) )
{
case 1: tempdata.LinienFarbe = CLR_RED ; break;
case 2: tempdata.LinienFarbe = CLR_PINK ; break;
case 3: tempdata.LinienFarbe = CLR_YELLOW ; break;
case 4: tempdata.LinienFarbe = CLR_WHITE ; break;
}
break;
}
// Linienart Valueset abfragen
ZeileSpalte = (ULONG)
WinSendDlgItemMsg((HWND)nbpage[3].hwndDlg,
ID_LinienArt,
VM_QUERYSELECTEDITEM,
NULLHANDLE,
NULL);
switch ( SHORT2FROMMR(ZeileSpalte) )
{
case 1: tempdata.LinienArt = LINETYPE_DEFAULT ; break;
case 2: tempdata.LinienArt = LINETYPE_LONGDASH ; break;
case 3: tempdata.LinienArt = LINETYPE_DASHDOT ; break;
case 4: tempdata.LinienArt = LINETYPE_DOT ; break;
}
if ( cvError == FALSE )
{
// tempor„re Filterdaten in globales Filterarray bernehmen
fdata[(tempdata.Nummer)-1] = tempdata;
WinDismissDlg (hwnd, ID_FilterDialog_Ok);
}
break;
case ID_FilterDialog_Abbruch:
WinDismissDlg (hwnd, ID_FilterDialog_Abbruch);
break;
}
break;
default: // Default-DialogProc
return WinDefDlgProc(hwnd, msg, mp1, mp2);
break;
}
return (MRESULT)FALSE;
}
// ************************************************************************
// TypDlgProc
// Bemerkung: Filter Bearbeiten... Notizbuch-Seite "Typeneinstellungen"
// ************************************************************************
MRESULT EXPENTRY TypDlgProc(HWND hwndDlg, ULONG msg, MPARAM mp1, MPARAM mp2 )
{
HWND hwndValueSet;
HBITMAP hbm;
HPS hps;
BOOL UeberlagState;
PVOID data;
static PFDATA pfdata;
switch (msg)
{
case WM_INITDLG: // Dialoginitialisierung
data = (PVOID) mp2;
pfdata = (PFDATA) data;
hps = WinGetPS (hwndDlg);
hwndValueSet = WinWindowFromID (hwndDlg, ID_TypSet);
hbm = (HBITMAP) GpiLoadBitmap (hps, NULLHANDLE, IDB_TP, 32L, 32L);
WinSendMsg (hwndValueSet,
VM_SETITEM,
MPFROM2SHORT (1,1),
(MPARAM) hbm);
hbm = (HBITMAP) GpiLoadBitmap (hps, NULLHANDLE, IDB_HP, 32L, 32L);
WinSendMsg (hwndValueSet,
VM_SETITEM,
MPFROM2SHORT (1,2),
(MPARAM) hbm);
hbm = (HBITMAP) GpiLoadBitmap (hps, NULLHANDLE, IDB_BP, 32L, 32L);
WinSendMsg (hwndValueSet,
VM_SETITEM,
MPFROM2SHORT (1,3),
(MPARAM) hbm);
hbm = (HBITMAP) GpiLoadBitmap (hps, NULLHANDLE, IDB_BS, 32L, 32L);
WinSendMsg (hwndValueSet,
VM_SETITEM,
MPFROM2SHORT (1,4),
(MPARAM) hbm);
// BP & BS noch nicht aktiviert in diser Version!!!
WinSendMsg (hwndValueSet,
VM_SETITEMATTR,
MPFROM2SHORT (1,3),
MPFROM2SHORT (VIA_DISABLED, TRUE));
WinSendMsg (hwndValueSet,
VM_SETITEMATTR,
MPFROM2SHORT (1,4),
MPFROM2SHORT (VIA_DISABLED, TRUE));
if ((*pfdata).Typ == fltGrundTyp) // Typ Schalter
WinSendDlgItemMsg(hwndDlg, ID_GrundBtn,
BM_CLICK,
MPFROMSHORT (0),
NULL);
else
WinSendDlgItemMsg(hwndDlg, ID_UeberlagBtn,
BM_CLICK,
MPFROMSHORT (0),
NULL);
switch ( (*pfdata).Grundtyp ) // Grundtyp ValueSet
{
case fltTP:
WinSendDlgItemMsg(hwndDlg, ID_TypSet,
VM_SELECTITEM,
MPFROM2SHORT (1,1),
NULL);
break;
case fltHP:
WinSendDlgItemMsg(hwndDlg, ID_TypSet,
VM_SELECTITEM,
MPFROM2SHORT (1,2),
NULL);
break;
case fltBP:
WinSendDlgItemMsg(hwndDlg, ID_TypSet,
VM_SELECTITEM,
MPFROM2SHORT (1,3),
NULL);
break;
case fltBS:
WinSendDlgItemMsg(hwndDlg, ID_TypSet,
VM_SELECTITEM,
MPFROM2SHORT (1,4),
NULL);
break;
}
if ( (*pfdata).Aktiv == TRUE )
WinSendDlgItemMsg(hwndDlg, ID_AktivBtn,
BM_CLICK,
MPFROMSHORT (0),
NULL);
// šberlagert mit Flt.1
if ( (*pfdata).MulMitFlt1 == TRUE )
WinSendDlgItemMsg(hwndDlg, ID_Ueberlag1Btn,
BM_CLICK,
MPFROMSHORT (0),
NULL);
// šberlagert mit Flt.2
if ( (*pfdata).MulMitFlt2 == TRUE )
WinSendDlgItemMsg(hwndDlg, ID_Ueberlag2Btn,
BM_CLICK,
MPFROMSHORT (0),
NULL);
// šberlagert mit Flt.3
if ( (*pfdata).MulMitFlt3 == TRUE )
WinSendDlgItemMsg(hwndDlg, ID_Ueberlag3Btn,
BM_CLICK,
MPFROMSHORT (0),
NULL);
// šberlagert mit Flt.4
if ( (*pfdata).MulMitFlt4 == TRUE )
WinSendDlgItemMsg(hwndDlg, ID_Ueberlag4Btn,
BM_CLICK,
MPFROMSHORT (0),
NULL);
WinReleasePS (hps);
break;
case WM_CONTROL:
switch (SHORT2FROMMP (mp1))
{
case BN_CLICKED: // Button-Nachricht
UeberlagState =
WinSendDlgItemMsg(hwndDlg,
ID_UeberlagBtn,
BM_QUERYCHECK,
NULLHANDLE,
NULL)
? (BOOL) TRUE : (BOOL) FALSE;
// Controls in Typ-Dlg enable/disable
WinEnableControl(hwndDlg, ID_Ueberlag1Btn, UeberlagState);
WinEnableControl(hwndDlg, ID_Ueberlag2Btn, UeberlagState);
WinEnableControl(hwndDlg, ID_Ueberlag3Btn, UeberlagState);
WinEnableControl(hwndDlg, ID_Ueberlag4Btn, UeberlagState);
WinEnableControl(hwndDlg, ID_TypSet, !UeberlagState);
WinEnableControl(hwndDlg,
ID_Ueberlag1Btn-1+((*pfdata).Nummer),
FALSE);
// Controls in Charakter-Dlg enable/disable
WinEnableControl(nbpage[1].hwndDlg,
ID_Bessel, !UeberlagState);
WinEnableControl(nbpage[1].hwndDlg,
ID_Butter, !UeberlagState);
WinEnableControl(nbpage[1].hwndDlg,
ID_Tscheb05, !UeberlagState);
WinEnableControl(nbpage[1].hwndDlg,
ID_Tscheb3, !UeberlagState);
WinEnableControl(nbpage[1].hwndDlg,
ID_Ordnung, !UeberlagState);
// Controls in Parameter-Dlg enable/disable
WinEnableControl(nbpage[2].hwndDlg,
ID_Amplitude, !UeberlagState);
WinEnableControl(nbpage[2].hwndDlg,
ID_Grenz, !UeberlagState);
break;
}
break;
default: return WinDefDlgProc(hwndDlg,msg,mp1,mp2);
}
return (MRESULT) TRUE;
}
// ************************************************************************
// CharDlgProc
// Bemerkung: Filter Bearbeiten... Notizbuch-Seite "Charakteristik"
// ************************************************************************
MRESULT EXPENTRY CharDlgProc(HWND hwndDlg, ULONG msg, MPARAM mp1, MPARAM mp2 )
{
BOOL UeberlagState;
HWND hwndText;
PSZ pszFont = "8.Helv";
ULONG ulColor;
PVOID data;
static PFDATA pfdata;
switch ( msg )
{
case WM_INITDLG: // Dialoginitialisierung
data = (PVOID) mp2;
pfdata = (PFDATA) data;
ulColor = CLR_BLACK;
hwndText = WinWindowFromID (hwndDlg, ID_Ordnung_Txt);
WinSetPresParam(hwndText,
PP_FOREGROUNDCOLORINDEX,
(ULONG)sizeof(LONG),
(PVOID)&ulColor );
WinSetPresParam(hwndText, PP_FONTNAMESIZE,
(ULONG)strlen(pszFont) + 1,
(PVOID)pszFont );
switch ((*pfdata).Charakter)
{
case fltBessel:
WinSendDlgItemMsg(hwndDlg,
ID_Bessel,
BM_CLICK,
MPFROMSHORT (0),
NULL);
break;
case fltButter:
WinSendDlgItemMsg(hwndDlg,
ID_Butter,
BM_CLICK,
MPFROMSHORT (0),
NULL);
break;
case fltTscheb05:
WinSendDlgItemMsg( | |