void AdjustDIBBrightness(unsigned char* rgbImg, unsigned char* chImg, int rows, int cols,const int v) { int nDelta = WIDTHBYTES(24*cols) - cols*24/8; BYTE r, g, b; for (int ny=0; ny<rows; ny++) { for (int nx=0; nx<cols/2; nx++){ const unsigned int m = ny*cols*3+3*nx; b = rgbImg[m]; g = rgbImg[m+1]; r = rgbImg[m+2]; ChangeBrightness(v, &r, &g, &b); //ChangeContrast(-v+10, &r, &g, &b); rgbImg[m] = b; rgbImg[m+1] = g; rgbImg[m+2] = r; } } }
void Statistics::DrawBarChart(HDC hdc, const RECT rc, LeastSquares* lsdata) { int i; COLORREF Col; if (unscaled_x || unscaled_y) { return; } if(INVERTCOLORS) Col = ChangeBrightness(RGB_GREEN, 0.5); else Col = RGB_WHITE; HPEN hpBar = (HPEN)CreatePen(PS_SOLID, IBLSCALE(1), Col); HBRUSH hbBar = (HBRUSH)CreateSolidBrush(Col); HPEN oldpen = (HPEN) SelectObject(hdc, hpBar); HBRUSH oldbrush = (HBRUSH) SelectObject(hdc, hbBar); int xmin, ymin, xmax, ymax; for (i= 0; i<lsdata->sum_n; i++) { xmin = (int)((i+1+0.2)*xscale)+rc.left+BORDER_X; ymin = (int)((y_max-y_min)*yscale)+rc.top; xmax = (int)((i+1+0.8)*xscale)+rc.left+BORDER_X; ymax = (int)((y_max-lsdata->ystore[i])*yscale)+rc.top; Rectangle(hdc, xmin, ymin, xmax, ymax); } SelectObject(hdc, oldpen); SelectObject(hdc, oldbrush); DeleteObject (hpBar); DeleteObject (hbBar); }
void CNavPaneWnd::OnPaint() { CPaintDC dc(this); // device context for painting CRect rcClient = ::GetClientRect(this); COLORREF clrBtnface = ::GetSysColor(COLOR_BTNFACE); COLORREF clrTabBg = ChangeBrightness(clrBtnface, 0.85); COLORREF clrHilight = ::GetSysColor(COLOR_BTNHILIGHT); COLORREF clrShadow = ::GetSysColor(COLOR_BTNSHADOW); COLORREF clrFrame = ::GetSysColor(COLOR_WINDOWFRAME); if (m_tabs.empty()) { dc.FillSolidRect(rcClient, clrBtnface); return; } // Draw tabs offscreen CSize szTabs(s_nTabsWidth + 1, rcClient.Height()); m_offscreenDC.Create(&dc, szTabs); CDC* pDC = &m_offscreenDC; CRect rcTabs(rcClient); rcTabs.right = rcTabs.left + s_nTabsWidth; pDC->FillSolidRect(rcTabs, clrTabBg); // Vertical line CRect rcLine(rcTabs.right, rcClient.top, rcTabs.right + 1, rcClient.bottom); pDC->FillSolidRect(rcLine, clrShadow); for (int nDiff = (int)m_tabs.size(); nDiff > 0; --nDiff) { if (m_nActiveTab - nDiff >= 0) DrawTab(pDC, m_nActiveTab - nDiff, false); if (m_nActiveTab + nDiff < static_cast<int>(m_tabs.size())) DrawTab(pDC, m_nActiveTab + nDiff, false); } DrawTab(pDC, m_nActiveTab, true); // Flush bitmap to screen dc dc.BitBlt(0, 0, szTabs.cx, szTabs.cy, pDC, 0, 0, SRCCOPY); m_offscreenDC.Release(); // Left space rcTabs.left = rcTabs.right + 1; rcTabs.right = rcTabs.left + s_nLeftMargin; dc.FillSolidRect(rcTabs, clrBtnface); if (m_tabs[m_nActiveTab].bHasBorder) { rcLine.OffsetRect(s_nLeftMargin + 1, 0); rcLine.top += s_nTopMargin; dc.FillSolidRect(rcLine, clrShadow); } // Top space rcTabs.right = rcClient.right; rcTabs.bottom = rcTabs.top + s_nTopMargin; dc.FillSolidRect(rcTabs, clrBtnface); if (m_tabs[m_nActiveTab].bHasBorder) { rcLine.right = rcClient.right; rcLine.bottom = rcLine.top + 1; dc.FillSolidRect(rcLine, clrShadow); } if (rcClient.Width() > 70) { // Close button if (m_hTheme != NULL) { if (m_bClosePressed) XPDrawThemeBackground(m_hTheme, dc.m_hDC, TP_BUTTON, TS_PRESSED, m_rcClose, NULL); else if (m_bCloseActive) XPDrawThemeBackground(m_hTheme, dc.m_hDC, TP_BUTTON, TS_HOT, m_rcClose, NULL); } else { if (m_bClosePressed) dc.Draw3dRect(m_rcClose, clrShadow, clrHilight); else if (m_bCloseActive) dc.Draw3dRect(m_rcClose, clrHilight, clrShadow); } CPoint ptOffset(m_rcClose.left + (m_rcClose.Width() - 10) / 2, m_rcClose.top + (m_rcClose.Height() - 10) / 2); if (m_bClosePressed) ptOffset.Offset(1, m_hTheme != NULL ? 0 : 1); m_imgClose.Draw(&dc, 0, ptOffset, ILD_NORMAL); // Settings button if (m_nActiveTab != -1 && m_tabs[m_nActiveTab].bHasSettings) { if (m_hTheme != NULL) { if (m_bSettingsPressed) XPDrawThemeBackground(m_hTheme, dc.m_hDC, TP_BUTTON, TS_PRESSED, m_rcSettings, NULL); else if (m_bSettingsActive) XPDrawThemeBackground(m_hTheme, dc.m_hDC, TP_BUTTON, TS_HOT, m_rcSettings, NULL); } else { if (m_bSettingsPressed) dc.Draw3dRect(m_rcSettings, clrShadow, clrHilight); else if (m_bSettingsActive) dc.Draw3dRect(m_rcSettings, clrHilight, clrShadow); } CPoint ptOffset2(m_rcSettings.left + (m_rcSettings.Width() - 10) / 2, m_rcSettings.top + (m_rcSettings.Height() - 10) / 2); if (m_bSettingsPressed) ptOffset2.Offset(1, m_hTheme != NULL ? 0 : 1); m_imgSettings.Draw(&dc, 0, ptOffset2, ILD_NORMAL); } } }
void CNavPaneWnd::DrawTab(CDC* pDC, int nTab, bool bActive) { Tab& tab = m_tabs[nTab]; COLORREF clrBtnface = ::GetSysColor(COLOR_BTNFACE); COLORREF clrTabBg = ChangeBrightness(clrBtnface, 0.85); COLORREF clrHilight = ::GetSysColor(COLOR_BTNHILIGHT); COLORREF clrShadow = ::GetSysColor(COLOR_BTNSHADOW); COLORREF clrFrame = ::GetSysColor(COLOR_WINDOWFRAME); COLORREF clrText = ::GetSysColor(COLOR_WINDOWTEXT); CBrush brushBtnface(clrBtnface); CPen penBtnface(PS_SOLID, 1, clrBtnface); CPen penShadow(PS_SOLID, 1, clrShadow); CPen penHilight(PS_SOLID, 1, clrHilight); CRect rcTab = tab.rcTab; rcTab.bottom += s_nTabSize / 2 - 2; pDC->FillSolidRect(rcTab, clrBtnface); // Vertical line CRect rcLine(rcTab.left, rcTab.top, rcTab.left + 1, rcTab.bottom); pDC->FillSolidRect(rcLine, clrShadow); // Horizontal line CRect rcHorzLine(rcTab.left, rcTab.bottom, rcTab.right, rcTab.bottom + 1); pDC->FillSolidRect(rcHorzLine, clrShadow); CPoint points[] = { CPoint(rcTab.left, rcTab.top - 1), CPoint(rcTab.right - 1, rcTab.top - s_nTabSize + 1), CPoint(rcTab.right - 1, rcTab.top - 1) }; CBrush* pOldBrush = pDC->SelectObject(&brushBtnface); CPen* pOldPen = pDC->SelectObject(&penBtnface); pDC->SetPolyFillMode(WINDING); pDC->Polygon(points, 3); pDC->SelectObject(pOldBrush); pDC->SelectObject(pOldPen); CPoint points2[] = { CPoint(rcTab.left, rcTab.top - 1), CPoint(rcTab.right + 1, rcTab.top - s_nTabSize - 1) }; pOldPen = pDC->SelectObject(&penShadow); pDC->Polyline(points2, 2); pDC->SelectObject(pOldPen); if (bActive) { rcLine.OffsetRect(s_nTabSize - 1, 0); rcLine.top -= s_nTabSize - 1; pDC->FillSolidRect(rcLine, clrBtnface); } CFont* pOldFont = pDC->SelectObject(bActive ? &m_fontActive : &m_font); pDC->SetTextColor(clrText); pDC->SetBkMode(TRANSPARENT); pDC->SetTextAlign(TA_CENTER | TA_BASELINE); pDC->TextOut(tab.rcTab.right - 4, tab.rcTab.CenterPoint().y, tab.strName); pDC->SelectObject(pOldFont); }