|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.