cmsdataq.c
/*--------------------------------------------------------------------
CMSDATAQ.C -- CMS Data Aquisition window
L. R. Erickson, Apr. 1994
-------------------------------------------------------------------*/
#include <windows.h>
#include <stdio.h>
#include <float.h>
#include <math.h>
#include <string.h>
#include "cms.h"
static cxMinSize, cyMinSize ;
static cxDispChar, cyDispChar ;
static iNumDispPts, iNumDispLines ;
#define IDCNTL_SETUPBUTTON 100
//************* Start of CMSDataAcqWndProc *************************
long FAR PASCAL _export CMSDataAcqWndProc (HWND hwnd, UINT message,
UINT wParam, LONG lParam)
{
static HWND hwndClient, hwndFrame, hwndDispSetupButton ;
static HMENU hMenuDataAcq, hMenuDataAcqWindow ;
static FARPROC lpfnDataSetupDlgProc ;
int i ;
PAINTSTRUCT ps ;
HDC hdc ;
switch (message)
{
case WM_CREATE:
// Save window handles
hwndClient = GetParent (hwnd) ;
hwndFrame = GetParent (hwndClient) ;
lpfnDataSetupDlgProc = MakeProcInstance ((FARPROC)
DataSetupDlgProc, globhCMSInst) ;
hMenuDataAcq = LoadMenu (globhCMSInst, "CMSDataAcqMenu") ;
hMenuDataAcqWindow = GetSubMenu (hMenuDataAcq, DATAACQ_MENU_POS) ;
CalcMinSize () ;
// Make a control button
hwndDispSetupButton = CreateWindow (
globCntrlClass[CC_BUTTONINDEX],
"DATA SETUP",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
21 * cxDispChar,
((iNumDispLines - 2) * cyDispChar) +
(cyDispChar / 2),
12 * cxDispChar,
(7 * globcyCharSpace) / 4,
hwnd, IDCNTL_SETUPBUTTON, globhCMSInst, NULL) ;
// Start other windows
// PostMessage (hwndFrame, WM_COMMAND, ID_MAKEOPSWIN, 0L) ;
return 0 ;
case WM_MDIACTIVATE:
// Set the Data Acquisition menu if gaining focus
if (wParam == TRUE)
SendMessage (hwndClient, WM_MDISETMENU, 0,
MAKELONG (hMenuDataAcq, hMenuDataAcqWindow)) ;
DrawMenuBar (hwndFrame) ;
return 0 ;
case WM_SIZE :
ReSizeData (lParam) ;
MoveWindow (hwndDispSetupButton,
21 * cxDispChar,
((iNumDispLines - 2) * cyDispChar) +
(cyDispChar / 2),
12 * cxDispChar,
(7 * globcyCharSpace) / 4,
TRUE) ;
break ;
case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;
for (i = 0 ; i < iNumDispPts ; i++)
DrawDataPt(hwnd, i, hdc) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_COMMAND :
switch (wParam)
{
case IDCNTL_SETUPBUTTON :
if (DialogBox (globhCMSInst, "DataSetupDlgBox",
hwnd, lpfnDataSetupDlgProc))
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
}
return 0 ;
case WM_DESTROY :
DestroyMenu (hMenuDataAcq) ;
return 0 ;
}
return DefMDIChildProc (hwnd, message, wParam, lParam) ;
}
//************* End of CMSDataAcqWndProc *************************
//****************** Start of DrawDataPt *************************
void DrawDataPt( HWND hwnd, int Point, HDC hdc)
{
RECT PtRect ;
char szReadingBuf[8] ;
PtRect.top = (Point / 3) * cyDispChar ;
PtRect.bottom = PtRect.top + cyDispChar ;
PtRect.left = ((Point % 3) * (18 * cxDispChar)) +
cxDispChar ;
PtRect.right = PtRect.left + (8 * cxDispChar) ;
DrawText (hdc, (LPSTR) CMSData[CMSData[Point].disporder].displabel,
8, &PtRect, DT_NOCLIP | DT_SINGLELINE |
DT_LEFT) ;
PtRect.left = PtRect.right ;
PtRect.right = PtRect.left + (8 * cxDispChar) ;
if ((CMSData[Point].reading < 999) &&
(CMSData[Point].reading > -999))
{
_snprintf (szReadingBuf, 7, "%5.2f", CMSData[Point].reading ) ;
}
else
{
strcpy ( szReadingBuf, "RNGERR") ;
}
DrawText (hdc, szReadingBuf, -1, &PtRect, DT_NOCLIP | DT_SINGLELINE |
DT_RIGHT) ;
}
//****************** End of DrawDataPt *************************
//****************** Start of CalcMinSize ************************
void CalcMinSize (void)
{
cxMinSize = globcxCharSpace * 54 ;
iNumDispPts = 0 ;
while (CMSData[iNumDispPts].disporder < 999) iNumDispPts ++ ;
iNumDispLines = ((iNumDispPts + 2) / 3) + 2 ;
cyMinSize = iNumDispLines * globcyCharSpace ;
}
//****************** End of CalcMinSize ************************
//****************** Start of ResizeData ************************
void ReSizeData (LONG lParam)
{
if ((int) LOWORD (lParam) <= cxMinSize)
cxDispChar = globcxCharSpace ;
else
cxDispChar = (int) (((LONG) globcxCharSpace
* (LONG) LOWORD (lParam)) / (LONG) cxMinSize) ;
if ((int) HIWORD (lParam) <= cyMinSize)
cyDispChar = globcyCharSpace ;
else
cyDispChar = (int) (((LONG) globcyCharSpace
* (LONG) HIWORD (lParam)) / (LONG) cyMinSize) ;
}
//****************** End of ResizeData ************************
//****************** Start of DataSetupDlgProc ************************
BOOL FAR PASCAL _export DataSetupDlgProc (HWND hDlg, UINT message,
UINT wParam, LONG lParam)
{
switch (message)
{
case WM_INITDIALOG :
LoadPtList (hDlg) ;
return TRUE ;
case WM_COMMAND :
switch (wParam)
{
case ID_DISPDLGEXIT :
EndDialog (hDlg, 0) ;
return TRUE ;
}
break ;
}
return FALSE ;
}
//****************** End of DataSetupDlgProc ************************
//******************* Start of LoadPtList **********************
void LoadPtList (HWND hwnd)
{
int i ;
HWND hwndList ;
hwndList = GetDlgItem(hwnd, ID_DISPDLGPT) ;
for (i = 0 ; i < iNumDataPts ; i++)
SendMessage ( hwndList, CB_ADDSTRING, 0,
(LONG) (LPSTR) CMSData[i].instru) ;
}
//******************* End of LoadPtList **********************