Source file: /~heha/ewa/Ofen/prozess.zip/msvc/o1/main.cpp

#include "main.h"

CONFIG Config;
HINSTANCE hInstance;
HWND hMainWnd;
char DecimalChar;

bool CONFIG::Load() {
 HKEY key;
 bool ret=false;
 if (!RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\h#s\\o1"),0,KEY_QUERY_VALUE,&key)) {
  DWORD len=sizeof(*this);
  ret= !RegQueryValueEx(key,TEXT("config"),0,0,(byte*)this,&len) && len==sizeof(*this);
  RegCloseKey(key);
 }
 return ret;
}

bool CONFIG::Save() {
 HKEY key;
 DWORD dispo;
 bool ret=false;
 if (!RegCreateKeyEx(HKEY_CURRENT_USER,TEXT("Software\\h#s\\o1"),0,0,0,KEY_WRITE,0,&key,&dispo)) {
  if (dispo==REG_CREATED_NEW_KEY) {
   TCHAR buf[64];
   int l=GetWindowText(hMainWnd,buf,elemof(buf));
   RegSetValueEx(key,0,0,REG_SZ,(byte*)buf,(l+1)*sizeof(TCHAR));
  }
  ret= !RegSetValueEx(key,TEXT("config"),0,REG_BINARY,(byte*)this,sizeof(*this));
  RegCloseKey(key);
 }
 return ret;
}

static void repos(HDWP&wpi, HWND Wnd, HWND w, int dx, int dy, int cx, int cy) {
 Rect r;
 GetWindowRect(w,&r);
 r.right-=r.left; r.bottom-=r.top;
 ScreenToClient(Wnd,(POINT*)&r);
 r.left+=dx; r.top+=dy; r.right+=cx; r.bottom+=cy;
 wpi=DeferWindowPos(wpi,w,0,r.left,r.top,r.right,r.bottom,SWP_NOZORDER);
}
static void repos(HDWP&wpi, HWND Wnd, UINT id, int dx, int dy, int cx, int cy) {
 repos(wpi,Wnd,GetDlgItem(Wnd,id),dx,dy,cx,cy);
}

static BOOL CALLBACK MainDlgProc(HWND Wnd, UINT msg, WPARAM wParam, LPARAM lParam) {
 static SIZE prevsize,minsize;
 switch (msg) {
  case WM_INITDIALOG: {
   hMainWnd=Wnd;
   TCHAR s[8];
   GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SDECIMAL,s,elemof(s));
   WideCharToMultiByte(CP_ACP,0,s,1,&DecimalChar,1,0,0);
   WINDOWPLACEMENT wp;
   GetClientRect(Wnd,&wp.rcNormalPosition);
   prevsize.cx=wp.rcNormalPosition.right-wp.rcNormalPosition.left;
   prevsize.cy=wp.rcNormalPosition.bottom-wp.rcNormalPosition.top;
   wp.length=sizeof wp;
   GetWindowPlacement(Wnd,&wp);
   minsize.cx=wp.rcNormalPosition.right-wp.rcNormalPosition.left;
   minsize.cy=wp.rcNormalPosition.bottom-wp.rcNormalPosition.top;
   if (Config.Load()) {
    Config.WinPos.toRECT(wp.rcNormalPosition);
    wp.showCmd=Config.show;
    SetWindowPlacement(Wnd,&wp);
   }else Config.HidNo=Config.rawview=0;
   CheckRadioButton(Wnd,96,98,96+Config.rawview);
   HIDDEV::ild.cbSize=sizeof(HIDDEV::ild);
   SetupDiGetClassImageList(&HIDDEV::ild);
   SendDlgItemMessage(Wnd,10,CBEM_SETIMAGELIST,0,(LPARAM)HIDDEV::ild.ImageList);
   SendMessage(Wnd,WM_TIMER,1,0);
   onEditInit(GetDlgItem(Wnd,12));
//   PostMessage(Wnd,WM_COMMAND,MAKELONG(10,CBN_SELCHANGE),(LPARAM)GetDlgItem(Wnd,10));
   CreateStatusWindow(WS_VISIBLE|WS_CHILD|SBARS_SIZEGRIP,TEXT("Status"),Wnd,3);
/*
   const float data[]={10,0,0,10};
   const PLOTDATA pd={
    "Test",0xC4,0,{data}
   };
*/ PLOT pd;
   memset(&pd,0,sizeof pd);
   pd.name="Ist";
//   pd.unit="°C";
//   pd.unitcode=0x00010001;	// Kelvin
   pd.lineWidth=2;
   pd.sr.sx.f=regler.reportk.tr_ms/1000.0F;
   pd.sr.sy.f=regler.reportk.T_mK/1000.0F;
   pd.sr.typeY=1;		// short
   SendDlgItemMessage(Wnd,16,PM_SETPLOT,0,(LPARAM)&pd);
   pd.name="Power";
//   pd.unit="W";
//   pd.unitcode=0x7000D121;	// Watt (High-Nibble=Unit-Exponent)
   pd.index=1;
   pd.yscale=1;
   pd.sr.sy.f=regler.reportk.P_mW/1000.0F;
//   SendDlgItemMessage(Wnd,16,PM_SETPLOT,0,(LPARAM)&pd);
  }return TRUE;
  case WM_GETMINMAXINFO: {
   MINMAXINFO*mmi=(MINMAXINFO*)lParam;
   mmi->ptMinTrackSize.x=minsize.cx;	// Pixel
   mmi->ptMinTrackSize.y=minsize.cy;
  }break;
  case WM_SIZE: if (wParam!=SIZE_MINIMIZED) {
   if (prevsize.cx) {
    SIZE diff={GET_X_LPARAM(lParam)-prevsize.cx,GET_Y_LPARAM(lParam)-prevsize.cy};
    HDWP wpi=BeginDeferWindowPos(50);
    repos(wpi,Wnd,12,0,0,0,diff.cy);	// TableEdit
    repos(wpi,Wnd,16,0,0,diff.cx,diff.cy);	// XY-Graf
    for (HWND w=GetDlgItem(Wnd,96);;w=GetNextSibling(w)) {
     repos(wpi,Wnd,w,0,diff.cy,0,0);	// Anzeigen
     if (GetWindowID(w)==63) break;
    }
    EndDeferWindowPos(wpi);
   }
   prevsize.cx=GET_X_LPARAM(lParam);
   prevsize.cy=GET_Y_LPARAM(lParam);
   SendDlgItemMessage(Wnd,3,msg,wParam,lParam);	// Statuszeile
  }break;
  case WM_TIMER: switch (wParam) {
   case 1: {
    KillTimer(Wnd,wParam);
    HWND cb=GetDlgItem(Wnd,10);
    regler.Enum(cb,regler.mine);
//Unschön, aber da zumeist nur 0-1 Regler am PC hängt:
    if (!ComboBox_GetCount(cb) || !regler.hDev) PostMessage(Wnd,WM_COMMAND,MAKELONG(10,CBN_SELCHANGE),(LPARAM)cb);
   }break;
   case 2: {
    if (regler.getinput(1)) regler.onInputReport();
   }break;
   case 64:
   case 66:
   case 67:
   case 68: KillTimer(Wnd,wParam);
    if (GetFocus()==GetDlgItem(Wnd,wParam)) SetFocus(0);
    regler.setValue(LOBYTE(wParam));
   break;
  }break;
  case WM_COMMAND: switch (wParam) {
   case MAKELONG(10,CBN_SELCHANGE): {
    regler.Close();
    KillTimer(Wnd,2);
    EnableMenuItem(GetMenu(Wnd),16,MF_GRAYED);
    EnableMenuItem(GetMenu(Wnd),17,MF_GRAYED);
    EnableMenuItem(GetMenu(Wnd),99,MF_GRAYED);
    int sel=ComboBox_GetCurSel((HWND)lParam);
    if (sel>=0) {
     regler.Open(sel,regler.mine);
     if (regler.hDev && regler.getfeature(15)) {
      memcpy(&regler.reportk,regler.report,sizeof regler.reportk);
      EnableMenuItem(GetMenu(Wnd),16,MF_ENABLED);
      EnableMenuItem(GetMenu(Wnd),17,MF_ENABLED);
      EnableMenuItem(GetMenu(Wnd),99,MF_ENABLED);
      onEditRevert(GetDlgItem(Wnd,12));
      SetTimer(Wnd,2,250,0);
     }
    }
   }break;
   case 1: SetFocus(0); break;
   case 2: EndDialog(Wnd,wParam); break;
   case MAKELONG(12,EN_CHANGE): onEditChange((HWND)lParam); break;
   case 56:
   case 57: regler.setValue(LOBYTE(wParam)); break;
   case MAKELONG(64,EN_CHANGE):
   case MAKELONG(66,EN_CHANGE):
   case MAKELONG(67,EN_CHANGE):
   case MAKELONG(68,EN_CHANGE): SetTimer(Wnd,LOWORD(wParam),1000,0); break;
   case 96:
   case 97:
   case 98: Config.rawview=GetRadioCheck(Wnd,96,98); break;
   case 99: regler.report[0]=99; regler.report[1]=1; regler.setoutput(); break;
   case 16: DialogBox(0,MAKEINTRESOURCE(16),Wnd,PidDlgProc); break;
  }break;
  case WM_DEVICECHANGE: {
   SetTimer(Wnd,1,500,0);
  }break;
  case WM_CLOSE: {
   regler.Close();
   WINDOWPLACEMENT wp;
   wp.length=sizeof wp;
   GetWindowPlacement(Wnd,&wp);
   Config.WinPos.fromRECT(wp.rcNormalPosition);
   Config.show=(byte)wp.showCmd;
   Config.Save();
  }break;
  case WM_DESTROY: {
   SetupDiDestroyClassImageList(&HIDDEV::ild);
  }break;
 }
 return FALSE;
}

void CALLBACK WinMainCRTStartup() {
 InitCommonControls();
 LoadLibrary(TEXT("riched20.dll"));
 PlotInit();
 TableInit();
 ExitProcess(DialogBox(0,MAKEINTRESOURCE(1),0,MainDlgProc));
}

extern "C" int _fltused;
int _fltused;
Detected encoding: UTF-80