Annotation of mstools/samples/sdktools/capview/ranges.cpp, revision 1.1.1.1

1.1       root        1: #include        <afxwin.h>
                      2: #include        <afxdlgs.h>
                      3: #include        <afxcoll.h>
                      4: 
                      5: #include "resource.h"
                      6: #include "ranges.h"
                      7: 
                      8: /****************************** SPLIT Range Dialog ********************/
                      9: 
                     10: class SplitDlg : public CModalDialog
                     11: {
                     12: private:
                     13:     DWORD       c1;
                     14:     DWORD       c2;
                     15:     int         bottom;
                     16:     int         top;
                     17:     int         split;
                     18: public:
                     19:     SplitDlg(CWnd * pWnd, int bot, int top1, DWORD clr)
                     20:        : CModalDialog(IDD_SPLIT_DLG, pWnd)
                     21:     {
                     22:        split = bottom = bot;
                     23:        top = top1;
                     24:        c1 = c2 = clr;
                     25:        return;
                     26:     }
                     27: 
                     28:     int SplitValue() { return split; }
                     29:     DWORD Color1() { return c1; }
                     30:     DWORD Color2() { return c2; }
                     31:     
                     32:     BOOL OnInitDialog();
                     33:     void OnOK();
                     34:     DECLARE_MESSAGE_MAP()
                     35: };
                     36: 
                     37: BEGIN_MESSAGE_MAP(SplitDlg, CModalDialog)
                     38: END_MESSAGE_MAP()
                     39: 
                     40: BOOL SplitDlg::OnInitDialog()
                     41: {
                     42:     SetDlgItemInt(IDD_SPLIT_BOTTOM, bottom);
                     43:     SetDlgItemInt(IDD_SPLIT_TOP, top);
                     44:     SetDlgItemInt(IDD_SPLIT_VALUE, bottom);
                     45:     return TRUE;
                     46: }
                     47: 
                     48: void SplitDlg::OnOK()
                     49: {
                     50:     split = GetDlgItemInt(IDD_SPLIT_VALUE);
                     51:     EndDialog(IDOK);
                     52: }
                     53: 
                     54: /******************************* RangesDlg ************************/
                     55: 
                     56: class RangeDlg : public CModalDialog
                     57: {
                     58: private:
                     59:     RANGESTRUCT * prs;
                     60:     char *        pch[MAX_NUM_RANGES];
                     61:     int           iCurr;
                     62:     DWORD         clr;
                     63:     
                     64:     void FormatLine(int iLine);
                     65:        
                     66: public:
                     67:     RangeDlg(CWnd * pWnd, RANGESTRUCT * rs)
                     68:        : CModalDialog("RangeDlg", pWnd)
                     69:     {
                     70:        for (int i=0; i<MAX_NUM_RANGES; i++) pch[i] = NULL;
                     71:        prs = rs;
                     72:     }
                     73:     
                     74:     ~RangeDlg()
                     75:     {
                     76:        for (int i=0; i<MAX_NUM_RANGES; i++)
                     77:        if (pch[i] != NULL) free(pch[i]);
                     78:     }
                     79:     
                     80:     int GetAbove() {
                     81:        return GetDlgItemInt(ID_RANGE_ABOVE);
                     82:     }
                     83:     
                     84:     void SetAbove(int i) {
                     85:        SetDlgItemInt(ID_RANGE_ABOVE, i);
                     86:        return;
                     87:     }
                     88:     int GetBelow() {
                     89:        return GetDlgItemInt(ID_RANGE_BELOW);
                     90:     }
                     91:     
                     92:     void SetBelow(int i) {
                     93:        SetDlgItemInt(ID_RANGE_BELOW, i);
                     94:        return;
                     95:     }
                     96:     
                     97:     int GetColor() {
                     98:        return GetCheckedRadioButton(ID_RANGE_BLACK, ID_RANGE_WHITE)
                     99:                - ID_RANGE_BLACK;
                    100:     }
                    101:     
                    102:     void SetColor(int i) {
                    103:        CheckRadioButton(ID_RANGE_BLACK, ID_RANGE_WHITE, 
                    104:        ID_RANGE_BLACK + i);
                    105:        return;
                    106:     }
                    107:     
                    108:     BOOL OnInitDialog();
                    109:     void OnOK();
                    110: 
                    111:     afx_msg void OnDrawItem(LPDRAWITEMSTRUCT lpdis);    
                    112:     afx_msg void OnMeasureItem(LPMEASUREITEMSTRUCT lpmis);
                    113:     afx_msg void OnColorButton();
                    114:     afx_msg void OnChangeButton();
                    115:     afx_msg void OnSplitButton();
                    116:     afx_msg void OnDeleteButton();
                    117:     afx_msg void OnHelp();
                    118:            
                    119:     DECLARE_MESSAGE_MAP()
                    120: };
                    121: BEGIN_MESSAGE_MAP(RangeDlg, CModalDialog)
                    122:     ON_WM_DRAWITEM()
                    123:     ON_WM_MEASUREITEM()
                    124: 
                    125:     ON_COMMAND(ID_RANGE_ADD, OnSplitButton)
                    126:     ON_COMMAND(ID_RANGE_CHANGE, OnChangeButton)
                    127:     ON_COMMAND(ID_RANGE_COLOR, OnColorButton)
                    128:     ON_COMMAND(ID_RANGE_DELETE, OnDeleteButton)
                    129:     ON_COMMAND(IDHELP, OnHelp)
                    130: END_MESSAGE_MAP()
                    131: 
                    132: void RangeDlg::FormatLine(int i)
                    133: {
                    134:     char rgch[256];
                    135:     
                    136:     if (pch[i] != NULL) free(pch[i]);
                    137:     if (i == 0) {
                    138:        sprintf(rgch, "Below %d", prs->Above[i+1]);
                    139:     } else if (i == prs->cRanges-1) {
                    140:        sprintf(rgch, "Above %d%%", prs->Above[i]);
                    141:     } else {
                    142:        sprintf(rgch, "%d%% - %d%%", prs->Above[i], prs->Above[i+1]);
                    143:     }
                    144:     pch[i] = strdup(rgch);
                    145:     return;
                    146: }
                    147: 
                    148: BOOL RangeDlg::OnInitDialog()
                    149: {
                    150:     int  i;
                    151:    
                    152:     for (i=0; i<prs->cRanges; i++) {
                    153:        FormatLine(i);
                    154:        SendDlgItemMessage(ID_RANGE_LISTBOX, LB_ADDSTRING, 0, (LPARAM) pch[i]);
                    155:     }
                    156:    
                    157:    iCurr = 0;
                    158:    SetAbove(prs->Above[1]);
                    159:    SetBelow(prs->Above[0]);
                    160:    SetColor(prs->TextColor[0]);
                    161:    clr = prs->BackColor[0];
                    162:    
                    163:    SendDlgItemMessage(ID_RANGE_PRUNE, BM_SETCHECK, prs->fPrune, 0);
                    164:    return TRUE;
                    165: }
                    166: 
                    167: void RangeDlg::OnOK()
                    168: {
                    169:     prs->fPrune = SendDlgItemMessage(ID_RANGE_PRUNE, BM_GETCHECK, 0, 0);
                    170:     EndDialog(IDOK);
                    171: }
                    172: 
                    173: int DoRangesDlg(CWnd * pWnd, RANGESTRUCT * rs)
                    174: {
                    175:     RangeDlg dlg(pWnd, rs);
                    176:     return dlg.DoModal();
                    177: }
                    178: 
                    179: 
                    180: afx_msg void RangeDlg::OnMeasureItem(LPMEASUREITEMSTRUCT lpmis)
                    181: {
                    182:     lpmis->itemWidth = 100;
                    183:     lpmis->itemHeight = 20;
                    184:     
                    185:     return;
                    186: }
                    187: 
                    188: afx_msg void RangeDlg::OnDrawItem(LPDRAWITEMSTRUCT lpdis)
                    189: {
                    190:     switch( lpdis->itemAction ) {
                    191:       case ODA_DRAWENTIRE:
                    192:        if (lpdis->itemID != -1) {
                    193:            HBRUSH hBr;
                    194:            hBr = CreateSolidBrush( prs->BackColor[lpdis->itemID] );
                    195:            FillRect(lpdis->hDC, &lpdis->rcItem, hBr);
                    196:            DeleteObject( hBr );
                    197:            SetBkMode(lpdis->hDC, TRANSPARENT);
                    198:            SetTextColor(lpdis->hDC, prs->TextColor[lpdis->itemID] * RGB(255, 255, 255));
                    199:            DrawText(lpdis->hDC, (char *) lpdis->itemData, -1, &lpdis->rcItem, 
                    200:                DT_NOCLIP|DT_EXPANDTABS|DT_VCENTER|DT_SINGLELINE);
                    201:        }
                    202:        break;
                    203:        
                    204:       case ODA_SELECT:
                    205:        if (lpdis->itemState & ODS_SELECTED) {
                    206:            iCurr = lpdis->itemID;
                    207:            SetAbove(prs->Above[iCurr+1]);
                    208:            SetBelow(prs->Above[iCurr]);
                    209:            SetColor(prs->TextColor[iCurr]);
                    210:            clr = prs->BackColor[iCurr];
                    211:        } else {
                    212:        }
                    213:        break;
                    214:        
                    215:       case ODA_FOCUS:
                    216:        if (lpdis->itemState & ODS_FOCUS) {
                    217:        } else {
                    218:        }
                    219:        break;
                    220:        
                    221:       default:
                    222:        return;
                    223:     }
                    224:     return;
                    225: }
                    226: 
                    227: afx_msg void RangeDlg::OnChangeButton()
                    228: {
                    229:     if (iCurr > 0) {
                    230:        prs->Above[iCurr] = GetBelow();
                    231:     }
                    232:     
                    233:     if (iCurr < prs->cRanges) {
                    234:        prs->Above[iCurr+1] = GetAbove();
                    235:     }
                    236:     
                    237:     prs->TextColor[iCurr] = GetColor();
                    238:     prs->BackColor[iCurr] = clr;
                    239:     
                    240:     SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr, 0);
                    241:     FormatLine(iCurr);
                    242:     SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr, (LPARAM) pch[iCurr]);
                    243:     
                    244:     if (iCurr < prs->cRanges) {
                    245:        SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr+1, 0);
                    246:        FormatLine(iCurr+1);
                    247:        SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr+1, (LPARAM) pch[iCurr+1]);
                    248:     }
                    249:     
                    250:     return;
                    251: }
                    252: 
                    253: afx_msg void RangeDlg::OnColorButton()
                    254: {
                    255:     CColorDialog dlg(prs->BackColor[iCurr]);
                    256:     dlg.DoModal();
                    257:     prs->BackColor[iCurr] = dlg.GetColor();
                    258:     return;
                    259: }
                    260: 
                    261: afx_msg void RangeDlg::OnSplitButton()
                    262: {
                    263:     int i;
                    264: 
                    265:     SplitDlg dlg(NULL, prs->Above[iCurr], prs->Above[iCurr+1], prs->BackColor[iCurr]);
                    266:     if (dlg.DoModal()) {
                    267:        for (i=prs->cRanges; i>iCurr; i--) {
                    268:            prs->Above[i] = prs->Above[i-1];
                    269:            prs->BackColor[i] = prs->BackColor[i-1];
                    270:            pch[i] = pch[i-1];
                    271:        }
                    272:     }
                    273:     pch[iCurr] = NULL;
                    274:     prs->cRanges += 1;
                    275:     prs->Above[iCurr+1] = dlg.SplitValue();
                    276:     prs->BackColor[iCurr] = dlg.Color1();
                    277:     prs->BackColor[iCurr+1] = dlg.Color2();
                    278: 
                    279:     FormatLine(iCurr);   
                    280:     SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr, 0);
                    281:     SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr, (LPARAM) pch[iCurr]);
                    282:     FormatLine(iCurr+1);
                    283:     SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr+1, (LPARAM) pch[iCurr+1]);
                    284:     return;
                    285: }
                    286: 
                    287: afx_msg void RangeDlg::OnDeleteButton()
                    288: {
                    289:     return;
                    290: }
                    291: 
                    292: 
                    293: afx_msg void RangeDlg::OnHelp()
                    294: {
                    295:     WinHelp(m_hWnd, "capview.hlp", HELP_CONTEXT, (DWORD) IDD_RANGE_DLG);
                    296:     return;
                    297: }

unix.superglobalmegacorp.com

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