#include <windows.h>
#include <windowsx.h> //message crackers
//#include <stdio.h> //sprintf
//#include <stdlib.h> //atof
#include "dialog.h" //GetRadioCheck, exp10
#include "driver.h" //Get_Komma usw.
#include "d_output.h"
#include "sensokom.rh" //ID der Dialogressource
#include "toolstat.h" //HelpFileName
/* Die IDs der Dialog-Ressource sind für einfachen Zugriff sorgfältig
* ausgewählt: die Buttons ab 80 (links) bzw. 100 (rechts), die Editfelder
* in der Reihenfolge der Speicherstellen für die Schwellen ab 10.
* Deshalb kann ich symbolische Bezeichner für Ressourcen nicht ausstehen.
* Man vergleiche mal mit der Länge des ursprünglichen Quelltextes!
*/
void SetButtons(HWND Wnd, BYTE bits, UINT ID) {
//Setzt das Button-Rudel ab <ID> gemäß <bits>
CheckDlgButton(Wnd,ID+0+(bits&1),TRUE); bits>>=1; // Bit 0 (Steuerung)
CheckDlgButton(Wnd,ID+2+(bits&1),TRUE); bits>>=1; // Bit 1 (obere Schw.)
CheckDlgButton(Wnd,ID+4+(bits&3),TRUE); bits>>=2; // Bits 2 und 3
CheckDlgButton(Wnd,ID+8+(bits&1),TRUE); bits>>=1; // Bit 4 (untere Schw.)
CheckDlgButton(Wnd,ID+10+(bits&1),TRUE); // Bit 5 (Eingang)
}
void EnableButtons(HWND Wnd, UINT IDfirst, UINT IDlast, BOOL state) {
//Schaltet eine Reihe aufeinanderfolgender IDs ein oder aus
for (; IDfirst<=IDlast; IDfirst++) EnableDlgItem(Wnd,IDfirst,state);
}
BYTE GetButtons(HWND Wnd, UINT ID) {
//Holt die Bits vom Button-Rudel
BYTE ret=(BYTE)IsDlgButtonChecked(Wnd,ID+11); ret<<=1;
ret|=(BYTE)IsDlgButtonChecked(Wnd,ID+9); ret<<=1;
ret|=(BYTE)GetRadioCheck(Wnd,ID+4,ID+7); ret<<=2;
ret|=(BYTE)IsDlgButtonChecked(Wnd,ID+3); ret<<=1;
ret|=(BYTE)IsDlgButtonChecked(Wnd,ID+1); return ret;
}
BOOL CALLBACK OutputDlgProc(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
#define m_Adresse (BYTE)lParam
switch (Msg) {
case WM_INITDIALOG: {
int k,i;
long n;
char buf[16];
BYTE o;
SetWindowLong(Wnd,DWL_USER,lParam);
k=Get_Komma(m_Adresse);
if ((unsigned)k>6) k=0;
n=exp10(k);
for (i=0;i<4;i++) {
SetDlgItemFloat(Wnd,10+i,k,(float)Get_Schwelle(m_Adresse,i)/n);
}
Get_Einheit(m_Adresse,buf);
for (i=14;i<18;i++) {
SetDlgItemText(Wnd,i,buf); // 4x Einheit setzen
}
o=Get_IoputSettings(m_Adresse);
SetButtons(Wnd,o,80);
if (o&0x20) { // Eingang
EnableButtons(Wnd,80,89,FALSE);
}else if (!(o&1)){ // bei Rechnersteuerung
EnableButtons(Wnd,82,89,FALSE);
}
o=Get_OutputSettings(m_Adresse);
SetButtons(Wnd,o,100);
if (!(o&1)){ // bei Rechnersteuerung
EnableButtons(Wnd,102,109,FALSE);
}
}return TRUE;
case WM_COMMAND: {
switch (LOWORD(wParam)) {
case 80: { // bei Buttonklick übrige Buttons schalten
EnableButtons(Wnd,82,89,FALSE);
}break;
case 81: {
EnableButtons(Wnd,82,89,TRUE);
}break;
case 90: {
EnableButtons(Wnd,80,IsDlgButtonChecked(Wnd,81)?89:81,TRUE);
}break;
case 91: {
EnableButtons(Wnd,80,89,FALSE);
}break;
case 100: { // bei Buttonklick übrige Buttons schalten
EnableButtons(Wnd,102,109,FALSE);
}break;
case 101: {
EnableButtons(Wnd,102,109,TRUE);
}break;
case 9: { // Hilfe
WinHelp(Wnd,HelpFileName,HELP_CONTEXT,CM_KONFIGURATION_D_OUTPUT);
}break;
case 3: // Übernehmen
case 1: { // OK
int k,i;
long n;
float level[4];
for (i=0;i<4;i++) if (!GetDlgItemFloat(Wnd,10+i,level+i)) return FALSE;
SetWaitCursor(Wnd,TRUE);
lParam=GetWindowLong(Wnd,DWL_USER);
Set_IoputSettings (m_Adresse, (BYTE)(GetButtons(Wnd,80) &0x3F));
Set_OutputSettings(m_Adresse, (BYTE)(GetButtons(Wnd,100)&0x1F));
k=Get_Komma(m_Adresse);
if ((unsigned)k>6) k=0;
n=exp10(k);
for (i=0;i<4;i++) Set_Schwelle(m_Adresse,i,(long)(level[i]*n));
SetWaitCursor(Wnd,FALSE);
}if (LOWORD(wParam)!=1) break; // nur bei OK das Fenster schließen
case 2: EndDialog(Wnd,wParam);
}/*switch*/
}return FALSE;
}/*switch*/
return FALSE;
#undef m_Adresse
}
Detected encoding: ANSI (CP1252) | 4
|
|