File:  [WindowsNT SDKs] / mstools / samples / sdktools / capview / ranges.cpp
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 18:24:28 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: ntsdk-jul-1993, HEAD
Microsoft Windows NT Build 511 (SDK Final Release) 07-24-1993

#include        <afxwin.h>
#include        <afxdlgs.h>
#include        <afxcoll.h>

#include "resource.h"
#include "ranges.h"

/****************************** SPLIT Range Dialog ********************/

class SplitDlg : public CModalDialog
{
private:
    DWORD       c1;
    DWORD       c2;
    int         bottom;
    int         top;
    int         split;
public:
    SplitDlg(CWnd * pWnd, int bot, int top1, DWORD clr)
	: CModalDialog(IDD_SPLIT_DLG, pWnd)
    {
	split = bottom = bot;
	top = top1;
	c1 = c2 = clr;
	return;
    }

    int SplitValue() { return split; }
    DWORD Color1() { return c1; }
    DWORD Color2() { return c2; }
    
    BOOL OnInitDialog();
    void OnOK();
    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(SplitDlg, CModalDialog)
END_MESSAGE_MAP()

BOOL SplitDlg::OnInitDialog()
{
    SetDlgItemInt(IDD_SPLIT_BOTTOM, bottom);
    SetDlgItemInt(IDD_SPLIT_TOP, top);
    SetDlgItemInt(IDD_SPLIT_VALUE, bottom);
    return TRUE;
}

void SplitDlg::OnOK()
{
    split = GetDlgItemInt(IDD_SPLIT_VALUE);
    EndDialog(IDOK);
}

/******************************* RangesDlg ************************/

class RangeDlg : public CModalDialog
{
private:
    RANGESTRUCT * prs;
    char *        pch[MAX_NUM_RANGES];
    int           iCurr;
    DWORD         clr;
    
    void FormatLine(int iLine);
	
public:
    RangeDlg(CWnd * pWnd, RANGESTRUCT * rs)
	: CModalDialog("RangeDlg", pWnd)
    {
	for (int i=0; i<MAX_NUM_RANGES; i++) pch[i] = NULL;
	prs = rs;
    }
    
    ~RangeDlg()
    {
	for (int i=0; i<MAX_NUM_RANGES; i++)
	if (pch[i] != NULL) free(pch[i]);
    }
    
    int GetAbove() {
	return GetDlgItemInt(ID_RANGE_ABOVE);
    }
    
    void SetAbove(int i) {
	SetDlgItemInt(ID_RANGE_ABOVE, i);
	return;
    }
    int GetBelow() {
	return GetDlgItemInt(ID_RANGE_BELOW);
    }
    
    void SetBelow(int i) {
	SetDlgItemInt(ID_RANGE_BELOW, i);
	return;
    }
    
    int GetColor() {
	return GetCheckedRadioButton(ID_RANGE_BLACK, ID_RANGE_WHITE)
		- ID_RANGE_BLACK;
    }
    
    void SetColor(int i) {
	CheckRadioButton(ID_RANGE_BLACK, ID_RANGE_WHITE, 
	ID_RANGE_BLACK + i);
	return;
    }
    
    BOOL OnInitDialog();
    void OnOK();

    afx_msg void OnDrawItem(LPDRAWITEMSTRUCT lpdis);    
    afx_msg void OnMeasureItem(LPMEASUREITEMSTRUCT lpmis);
    afx_msg void OnColorButton();
    afx_msg void OnChangeButton();
    afx_msg void OnSplitButton();
    afx_msg void OnDeleteButton();
    afx_msg void OnHelp();
	    
    DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(RangeDlg, CModalDialog)
    ON_WM_DRAWITEM()
    ON_WM_MEASUREITEM()

    ON_COMMAND(ID_RANGE_ADD, OnSplitButton)
    ON_COMMAND(ID_RANGE_CHANGE, OnChangeButton)
    ON_COMMAND(ID_RANGE_COLOR, OnColorButton)
    ON_COMMAND(ID_RANGE_DELETE, OnDeleteButton)
    ON_COMMAND(IDHELP, OnHelp)
END_MESSAGE_MAP()

void RangeDlg::FormatLine(int i)
{
    char rgch[256];
    
    if (pch[i] != NULL) free(pch[i]);
    if (i == 0) {
	sprintf(rgch, "Below %d", prs->Above[i+1]);
    } else if (i == prs->cRanges-1) {
	sprintf(rgch, "Above %d%%", prs->Above[i]);
    } else {
	sprintf(rgch, "%d%% - %d%%", prs->Above[i], prs->Above[i+1]);
    }
    pch[i] = strdup(rgch);
    return;
}

BOOL RangeDlg::OnInitDialog()
{
    int  i;
   
    for (i=0; i<prs->cRanges; i++) {
	FormatLine(i);
	SendDlgItemMessage(ID_RANGE_LISTBOX, LB_ADDSTRING, 0, (LPARAM) pch[i]);
    }
   
   iCurr = 0;
   SetAbove(prs->Above[1]);
   SetBelow(prs->Above[0]);
   SetColor(prs->TextColor[0]);
   clr = prs->BackColor[0];
   
   SendDlgItemMessage(ID_RANGE_PRUNE, BM_SETCHECK, prs->fPrune, 0);
   return TRUE;
}

void RangeDlg::OnOK()
{
    prs->fPrune = SendDlgItemMessage(ID_RANGE_PRUNE, BM_GETCHECK, 0, 0);
    EndDialog(IDOK);
}

int DoRangesDlg(CWnd * pWnd, RANGESTRUCT * rs)
{
    RangeDlg dlg(pWnd, rs);
    return dlg.DoModal();
}


afx_msg void RangeDlg::OnMeasureItem(LPMEASUREITEMSTRUCT lpmis)
{
    lpmis->itemWidth = 100;
    lpmis->itemHeight = 20;
    
    return;
}

afx_msg void RangeDlg::OnDrawItem(LPDRAWITEMSTRUCT lpdis)
{
    switch( lpdis->itemAction ) {
      case ODA_DRAWENTIRE:
	if (lpdis->itemID != -1) {
	    HBRUSH hBr;
	    hBr = CreateSolidBrush( prs->BackColor[lpdis->itemID] );
	    FillRect(lpdis->hDC, &lpdis->rcItem, hBr);
	    DeleteObject( hBr );
	    SetBkMode(lpdis->hDC, TRANSPARENT);
	    SetTextColor(lpdis->hDC, prs->TextColor[lpdis->itemID] * RGB(255, 255, 255));
	    DrawText(lpdis->hDC, (char *) lpdis->itemData, -1, &lpdis->rcItem, 
		DT_NOCLIP|DT_EXPANDTABS|DT_VCENTER|DT_SINGLELINE);
	}
	break;
	
      case ODA_SELECT:
	if (lpdis->itemState & ODS_SELECTED) {
	    iCurr = lpdis->itemID;
	    SetAbove(prs->Above[iCurr+1]);
	    SetBelow(prs->Above[iCurr]);
	    SetColor(prs->TextColor[iCurr]);
	    clr = prs->BackColor[iCurr];
	} else {
	}
	break;
	
      case ODA_FOCUS:
	if (lpdis->itemState & ODS_FOCUS) {
	} else {
	}
	break;
	
      default:
	return;
    }
    return;
}

afx_msg void RangeDlg::OnChangeButton()
{
    if (iCurr > 0) {
	prs->Above[iCurr] = GetBelow();
    }
    
    if (iCurr < prs->cRanges) {
	prs->Above[iCurr+1] = GetAbove();
    }
    
    prs->TextColor[iCurr] = GetColor();
    prs->BackColor[iCurr] = clr;
    
    SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr, 0);
    FormatLine(iCurr);
    SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr, (LPARAM) pch[iCurr]);
    
    if (iCurr < prs->cRanges) {
	SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr+1, 0);
	FormatLine(iCurr+1);
	SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr+1, (LPARAM) pch[iCurr+1]);
    }
    
    return;
}

afx_msg void RangeDlg::OnColorButton()
{
    CColorDialog dlg(prs->BackColor[iCurr]);
    dlg.DoModal();
    prs->BackColor[iCurr] = dlg.GetColor();
    return;
}

afx_msg void RangeDlg::OnSplitButton()
{
    int i;

    SplitDlg dlg(NULL, prs->Above[iCurr], prs->Above[iCurr+1], prs->BackColor[iCurr]);
    if (dlg.DoModal()) {
	for (i=prs->cRanges; i>iCurr; i--) {
	    prs->Above[i] = prs->Above[i-1];
	    prs->BackColor[i] = prs->BackColor[i-1];
	    pch[i] = pch[i-1];
	}
    }
    pch[iCurr] = NULL;
    prs->cRanges += 1;
    prs->Above[iCurr+1] = dlg.SplitValue();
    prs->BackColor[iCurr] = dlg.Color1();
    prs->BackColor[iCurr+1] = dlg.Color2();

    FormatLine(iCurr);   
    SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr, 0);
    SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr, (LPARAM) pch[iCurr]);
    FormatLine(iCurr+1);
    SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr+1, (LPARAM) pch[iCurr+1]);
    return;
}

afx_msg void RangeDlg::OnDeleteButton()
{
    return;
}


afx_msg void RangeDlg::OnHelp()
{
    WinHelp(m_hWnd, "capview.hlp", HELP_CONTEXT, (DWORD) IDD_RANGE_DLG);
    return;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.