LRESULT Button::OwnerDrawProc(WPARAM wParam, LPARAM lParam) { LPDRAWITEMSTRUCT pdis = LPDRAWITEMSTRUCT(lParam); int offsetY = (Height - PIC_SIZE) / 2; int offsetX = offsetY + 5; SIZE textSize; GetTextExtentPoint(pdis->hDC, Title, lstrlen(Title), &textSize); RECT rect = pdis->rcItem; rect.left = (Width - textSize.cx - PIC_SIZE - 2 * offsetX) / 2; rect.top = offsetY; HDC hdc = pdis->hDC; FrameRect(pdis->hDC, &pdis->rcItem, HBRUSH(GetStockObject(BLACK_BRUSH))); if (wParam == IDC_DRAW_BUTTON) BitBlt(pdis->hDC, rect.left + offsetX, offsetY, PIC_SIZE, PIC_SIZE, DrawButtonDC, 0, 0, SRCCOPY); else BitBlt(pdis->hDC, rect.left + offsetX, offsetY, PIC_SIZE, PIC_SIZE, ClearButtonDC, 0, 0, SRCCOPY); rect.left += PIC_SIZE + 2 * offsetX; DrawText(hdc, Title, lstrlen(Title), &rect, 0); return TRUE; }
INT_PTR TlevelsPage::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: SelectObject(hdcGradient,oldHDCgradient); DeleteDC(hdcGradient); DeleteBitmap(bmpGradient); DeleteFont(fontGradient); SendMessage(GetDlgItem(m_hwnd,IDC_LBX_LEVELS_CURVES),WM_SETFONT,NULL,FALSE); DeleteFont(fontCurier); break; case WM_DRAWITEM: switch (wParam) { case IDC_BMP_HISTOGRAM: { LPDRAWITEMSTRUCT dis=LPDRAWITEMSTRUCT(lParam); int full=cfgGet(IDFF_levelsFullY); StretchDIBits(dis->hDC,0,0,dis->rcItem.right,dis->rcItem.bottom,full?0:16,0,full?256:234-16+1,64,histogramBits,(BITMAPINFO*)&histogramBmp,DIB_RGB_COLORS,SRCCOPY); wIn->draw(dis); return TRUE; } case IDC_BMP_LEVELS_IN: { LPDRAWITEMSTRUCT dis=LPDRAWITEMSTRUCT(lParam); StretchBlt(dis->hDC,0,0,dis->rcItem.right,10,hdcGradient,0,0,256,1,SRCCOPY); RECT r=dis->rcItem; r.top=10; FillRect(dis->hDC,&r,GetSysColorBrush(COLOR_BTNFACE)); if (filter && getCheck(IDC_CHB_LEVELS_INPUT_AUTO)) { int min,max; filter->getInAuto(&min,&max); drawTriangle(dis,min,true); drawTriangle(dis,max,true); } drawTriangle(dis,cfgGet(IDFF_levelsInMin)); drawTriangle(dis,cfgGet(IDFF_levelsInMax)); return TRUE; } case IDC_BMP_LEVELS_OUT: { LPDRAWITEMSTRUCT dis=LPDRAWITEMSTRUCT(lParam); StretchBlt(dis->hDC,0,0,dis->rcItem.right,10,hdcGradient,0,0,256,1,SRCCOPY); RECT r=dis->rcItem; r.top=10; FillRect(dis->hDC,&r,GetSysColorBrush(COLOR_BTNFACE)); drawTriangle(dis,cfgGet(IDFF_levelsOutMin)); drawTriangle(dis,cfgGet(IDFF_levelsOutMax)); return TRUE; } case IDC_BMP_LEVELS_CURVES: { LPDRAWITEMSTRUCT dis=LPDRAWITEMSTRUCT(lParam); StretchDIBits(dis->hDC,0,0,dis->rcItem.right,dis->rcItem.bottom,0,0,256,256,histogramBits,(BITMAPINFO*)&curvesBmp,DIB_RGB_COLORS,SRCCOPY); wCurves->draw(dis); return TRUE; } } break; case WM_SETCURSOR: if (HWND(wParam)==hcurves) { if (wCurves->setCursor()) { SetCursor(LoadCursor(NULL,IDC_SIZEALL)); setDlgResult(TRUE); } return TRUE; } break; } return TconfPageDecVideo::msgProc(uMsg,wParam,lParam); }
INT_PTR TgraphPage::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: if (graphBits) { free(graphBits); } graphBits = NULL; if (frames) { delete []frames; } frames = NULL; deciE->setHgraph(NULL); KillTimer(m_hwnd, IDC_TMR_GRAPH); break; case WM_DRAWITEM: if (wParam == IDC_BMP_GRAPH) { LPDRAWITEMSTRUCT dis = LPDRAWITEMSTRUCT(lParam); SetDIBitsToDevice(dis->hDC, 0, 0, gx, gy, 0, 0, 0, gy, graphBits, (BITMAPINFO*)&graphBmp, DIB_RGB_COLORS); return TRUE; } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_ED_OUTPUTDEBUGFILE: if (HIWORD(wParam) == EN_CHANGE && !isSetWindowText) { char_t debugfile[MAX_PATH]; GetDlgItemText(m_hwnd, IDC_ED_OUTPUTDEBUGFILE, debugfile, MAX_PATH); cfgSet(IDFF_debugfile, debugfile); return TRUE; } break; } break; case WM_TIMER: if (wParam == IDC_TMR_GRAPH) { if (!cfgGet(IDFF_enc_working)) { return TRUE; } TencStats *stats = NULL; if (FAILED(deciE->getEncStats(&stats))) { return TRUE; } //if (oldframescount>stats.count) t1=0; clock_t t2 = clock(); setText(IDC_LBL_STATS_FPS, _l("%s %5.2f"), _(IDC_LBL_STATS_FPS), (t1 == 0) ? 0 : float(CLOCKS_PER_SEC * (stats->count - oldframescount) / float(t2 - t1))); t1 = t2; oldframescount = stats->count; setText(IDC_LBL_STATS_NUMFRAMES, _l("%s %i"), _(IDC_LBL_STATS_NUMFRAMES), stats->count, FALSE); setText(IDC_LBL_STATS_AVGQUANT, _l("%s %5.2f"), _(IDC_LBL_STATS_AVGQUANT), stats->count ? float(stats->sumQuants) / stats->count : 0.0f); setText(IDC_LBL_STATS_KBPS, _l("%s %i"), _(IDC_LBL_STATS_KBPS), stats->count ? int((8ULL * stats->sumFramesize * cfgGet(IDFF_enc_fpsRate)) / (1000ULL * stats->count * cfgGet(IDFF_enc_fpsScale))) : 0); char_t psnrYs[30], psnrUs[30], psnrVs[30]; if (sup_PSNR(codecId) && cfgGet(IDFF_enc_psnr)) { double psnrY, psnrU, psnrV; stats->calcPSNR(&psnrY, &psnrU, &psnrV); if (psnrY > 0) { tsprintf(psnrYs, _l("%6.2f"), psnrY); } else { strcpy(psnrYs, _(IDC_LBL_STATS_PSNR, _l("exact"))); } if (psnrU > 0) { tsprintf(psnrUs, _l("%6.2f"), psnrU); } else { strcpy(psnrUs, _(IDC_LBL_STATS_PSNR, _l("exact"))); } if (psnrV > 0) { tsprintf(psnrVs, _l("%6.2f"), psnrV); } else { strcpy(psnrVs, _(IDC_LBL_STATS_PSNR, _l("exact"))); } setText(IDC_LBL_STATS_PSNR, _l("%s %s,%s,%s"), _(IDC_LBL_STATS_PSNR), psnrYs, psnrUs, psnrVs); } else { setText(IDC_LBL_STATS_PSNR, _l("%s %s"), _(IDC_LBL_STATS_PSNR), _(IDC_LBL_STATS_PSNR, _l("unknown"))); } if (cfgGet(IDFF_enc_showGraph)) { repaint(hg); } return TRUE; } break; case TencStats::MSG_FF_FRAME: { memmove(frames, frames + 1, sizeof(Tframe) * (gx - 1)); frames[gx - 1].set(wParam, lParam); unsigned int maxframesize = 1; for (int i = 0; i < gx; i++) if (frames[i].size > maxframesize) { maxframesize = frames[i].size; } if (oldmaxframesize != maxframesize) { oldmaxframesize = maxframesize; SetDlgItemInt(m_hwnd, IDC_LBL_GRAPH_MAXKB, maxframesize / 1024, FALSE); for (int i = 0; i < gx; i++) { shiftGraph(frames[i]); } } else { shiftGraph(frames[gx - 1]); } return TRUE; } case TencStats::MSG_FF_CLEAR: t1 = 0; oldframescount = 0; graph2dlg(); return TRUE; } return TconfPageEnc::msgProc(uMsg, wParam, lParam); }