// Updates the display. void CHistogramDlg::set_histo_channel() { HWND hHisto, hTags; BOOL bInv, bMakeTotals; LPDWORD lpHisto; int i, j, iHisto; LONG sum; LONG lMaxEntry; LPDWORD lpdw; char szNum[40]; HWND hDlg = GetSafeHwnd(); bMakeTotals = (m_lpHistos[0] == NULL); lpHisto = get_histo(m_lpHistos, m_wChannel, &bInv, &iHisto); if (!lpHisto) return; // need to compute totals? if (bMakeTotals) { for (j=0;j<5;j++) { lpdw = m_lpHistos[j]; sum = 0L; for (i=0;i<256;i++) sum += *lpdw++; m_lTotals[j] = sum; } } // setup the histo control lMaxEntry = compute_yscale(lpHisto); hHisto = ::GetDlgItem(hDlg, IDC_HISTOGRAM); Histo_Init(hHisto, lpHisto, lMaxEntry, HISTOMARKS, bInv ? HTS_FLIPX:0); // reset marks based on tag hTags = ::GetDlgItem(hDlg, IDC_TAGS); i = Tag_GetMark(hTags,0); Histo_SetMark(hHisto, 0, i, NO); i = Tag_GetMark(hTags,1); Histo_SetMark(hHisto, 1, i, NO); // setup the gradient set_gradient(IDC_HISTO_GRAD, m_wChannel); // setup readouts ::SetDlgItemText(hDlg, IDC_HISTO_TOTAL, ltoa(m_lTotals[iHisto],szNum,10)); ::SetDlgItemText(hDlg, IDC_HISTO_POS, (LPSTR)""); ::SetDlgItemText(hDlg, IDC_HISTO_VALUE, (LPSTR)""); histo_set_HMSvalues(); }
//************************************************************************ // set_quarter_channel // DESCRIPTION: // Makes the given channel the current channel. // Updates the display. //************************************************************************ VOID CToneBalanceDlg::set_quarter_channel(WORD wChannel) //************************************************************************ { LPDWORD lpHisto; HWND hControl; BOOL bInv; LONG lMaxEntry; int icons[3]; HWND hDlg = GetSafeHwnd(); m_lpData->lpMap = tone_activate_channel( wChannel ); lpHisto = get_histo(m_lpData->lpHistos, wChannel, &bInv); // setup the histo control lMaxEntry = compute_yscale(lpHisto); hControl = ::GetDlgItem(hDlg, IDC_HISTOGRAM); Histo_Init(hControl, lpHisto, lMaxEntry, 3, bInv ? HTS_FLIPX:0); m_lpData->iShadow = m_lpData->lpMap->Pnt[0].x; m_lpData->iMidtone = m_lpData->lpMap->Pnt[1].x; m_lpData->iHighlight = m_lpData->lpMap->Pnt[2].x; if (!(m_lpData->iHighlight - m_lpData->iShadow)) m_lpData->MidtonePer = 0; else m_lpData->MidtonePer = (m_lpData->iMidtone - m_lpData->iShadow)*255/ (m_lpData->iHighlight - m_lpData->iShadow); Histo_SetMark(hControl, 0, m_lpData->lpMap->Pnt[0].x, NO); Histo_SetMark(hControl, 1, m_lpData->lpMap->Pnt[1].x, NO); Histo_SetMark(hControl, 2, m_lpData->lpMap->Pnt[2].x, NO); // some people seem to have an update problem here ::InvalidateRect (hControl,NULL,FALSE); // setup tags hControl = ::GetDlgItem(hDlg, IDC_TAGS); icons[0] = IDC_QUART1; icons[1] = IDC_QUART2; icons[2] = IDC_QUART3; Tag_Init(hControl, 3, 255, &icons[0]); Tag_SetMark(hControl, 0, m_lpData->lpMap->Pnt[0].x, NO); Tag_SetMark(hControl, 1, m_lpData->lpMap->Pnt[1].x, NO); Tag_SetMark(hControl, 2, m_lpData->lpMap->Pnt[2].x, NO); // some people seem to have an update problem here ::InvalidateRect (hControl,NULL,FALSE); set_gradient(IDC_HISTO_GRAD, wChannel); // spins InitDlgItemSpin(hDlg, IDC_QUART1_VALUE, TO_DISPLAY(m_lpData->lpMap->Pnt[0].x), NO, 0, MAX_SPIN); InitDlgItemSpin(hDlg, IDC_QUART3_VALUE, TO_DISPLAY(m_lpData->lpMap->Pnt[2].x), NO, 0, MAX_SPIN); if (m_bUseMidPer) InitDlgItemSpin(hDlg, IDC_QUART2_VALUE, m_lpData->MidtonePer*100L/255, NO, 0, MAX_SPIN ); else InitDlgItemSpin(hDlg, IDC_QUART2_VALUE, TO_DISPLAY(m_lpData->lpMap->Pnt[1].x), NO, 0, MAX_SPIN ); InitDlgItemSpin(hDlg, IDC_MINHIGHLIGHT, TO_DISPLAY(m_lpData->lpMap->Pnt[2].y), NO, 0, MAX_SPIN); InitDlgItemSpin(hDlg, IDC_MAXSHADOW, TO_DISPLAY(m_lpData->lpMap->Pnt[0].y), NO, 0, MAX_SPIN); }