LRESULT WaitingUsersFrame::onCustomDraw(int /*idCtrl*/, LPNMHDR pnmh, BOOL& bHandled) { /* [-] IRainman if (!BOOLSETTING(SHOW_PROGRESS_BARS)) { bHandled = FALSE; return 0; } */ CRect rc; LPNMLVCUSTOMDRAW cd = reinterpret_cast<LPNMLVCUSTOMDRAW>(pnmh); UploadQueueItem *ii = (UploadQueueItem*)cd->nmcd.lItemlParam; // ?? switch (cd->nmcd.dwDrawStage) { case CDDS_PREPAINT: return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT: #ifdef FLYLINKDC_USE_LIST_VIEW_MATTRESS Colors::alternationBkColor(cd); // [+] IRainman #endif return CDRF_NOTIFYSUBITEMDRAW; case CDDS_SUBITEM | CDDS_ITEMPREPAINT: { // Let's draw a box if needed... if (BOOLSETTING(SHOW_PROGRESS_BARS) && m_ctrlList.findColumn(cd->iSubItem) == UploadQueueItem::COLUMN_TRANSFERRED) // [+] IRainman { // draw something nice... LocalArray<TCHAR, 256> buf; m_ctrlList.GetItemText((int)cd->nmcd.dwItemSpec, cd->iSubItem, buf.data(), 255); m_ctrlList.GetSubItemRect((int)cd->nmcd.dwItemSpec, cd->iSubItem, LVIR_BOUNDS, rc); // Real rc, the original one. CRect real_rc = rc; // We need to offset the current rc to (0, 0) to paint on the New dc rc.MoveToXY(0, 0); // Text rect CRect rc2 = rc; rc2.left += 6; // indented with 6 pixels rc2.right -= 2; // and without messing with the border of the cell // Set references CDC cdc; cdc.CreateCompatibleDC(cd->nmcd.hdc); HBITMAP hBmp = CreateCompatibleBitmap(cd->nmcd.hdc, real_rc.Width(), real_rc.Height()); HBITMAP pOldBmp = cdc.SelectBitmap(hBmp); HDC& dc = cdc.m_hDC; HFONT oldFont = (HFONT)SelectObject(dc, Fonts::g_font); SetBkMode(dc, TRANSPARENT); CBarShader statusBar(rc.bottom - rc.top, rc.right - rc.left, RGB(150, 0, 0), ii->getSize()); statusBar.FillRange(0, ii->getPos(), RGB(222, 160, 0)); statusBar.Draw(cdc, rc.top, rc.left, SETTING(PROGRESS_3DDEPTH)); SetTextColor(dc, SETTING(PROGRESS_TEXT_COLOR_UP)); ::ExtTextOut(dc, rc2.left, rc2.top + (rc2.Height() - WinUtil::getTextHeight(dc) - 1) / 2, ETO_CLIPPED, rc2, buf.data(), _tcslen(buf.data()), NULL); SelectObject(dc, oldFont); BitBlt(cd->nmcd.hdc, real_rc.left, real_rc.top, real_rc.Width(), real_rc.Height(), dc, 0, 0, SRCCOPY); DeleteObject(cdc.SelectBitmap(pOldBmp)); return CDRF_SKIPDEFAULT; } // [!] Colors::getUserColor(ii->getUser(), cd->clrText, cd->clrTextBk); // [!] IRainman fix todo [1] https://www.box.net/shared/f7c509838c3a1125842b , https://crash-server.com/DumpGroup.aspx?ClientID=guest&DumpGroupID=59082 // !SMT!-IP if (m_ctrlList.findColumn(cd->iSubItem) == UploadQueueItem::COLUMN_LOCATION) { const tstring l_text = ii->getText(UploadQueueItem::COLUMN_LOCATION); if (l_text.length() != 0) { m_ctrlList.GetSubItemRect((int)cd->nmcd.dwItemSpec, cd->iSubItem, LVIR_BOUNDS, rc); CRect rc2 = rc; m_ctrlList.SetItemFilled(cd, rc2, cd->clrText); LONG top = rc2.top + (rc2.Height() - 15) / 2; if ((top - rc2.top) < 2) top = rc2.top + 1; const POINT p = { rc2.left, top }; if (ii->m_location.isKnown()) { g_flagImage.DrawLocation(cd->nmcd.hdc, ii->m_location, p); } top = rc2.top + (rc2.Height() - 15 /*WinUtil::getTextHeight(cd->nmcd.hdc)*/ - 1) / 2; if (!l_text.empty()) { ::ExtTextOut(cd->nmcd.hdc, rc2.left + 30, top + 1, ETO_CLIPPED, rc2, l_text.c_str(), l_text.length(), NULL); } return CDRF_SKIPDEFAULT; } } } //[+]PPA // Fall through default: return CDRF_DODEFAULT; } }
LRESULT UploadQueueFrame::onCustomDraw(int /*idCtrl*/, LPNMHDR pnmh, BOOL& bHandled) { if(!BOOLSETTING(SHOW_PROGRESS_BARS)) { bHandled = FALSE; return 0; } CRect rc; LPNMLVCUSTOMDRAW cd = (LPNMLVCUSTOMDRAW)pnmh; switch(cd->nmcd.dwDrawStage) { case CDDS_PREPAINT: return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT: return CDRF_NOTIFYSUBITEMDRAW; case CDDS_SUBITEM | CDDS_ITEMPREPAINT: // Let's draw a box if needed... if(ctrlList.findColumn(cd->iSubItem) == UploadQueueItem::COLUMN_TRANSFERRED) { // draw something nice... TCHAR buf[256]; UploadQueueItem *ii = (UploadQueueItem*)cd->nmcd.lItemlParam; ctrlList.GetItemText((int)cd->nmcd.dwItemSpec, cd->iSubItem, buf, 255); buf[255] = 0; ctrlList.GetSubItemRect((int)cd->nmcd.dwItemSpec, cd->iSubItem, LVIR_BOUNDS, rc); // Text rect CRect rc2 = rc; rc2.MoveToXY(0, 0); rc2.left = 6; // indented with 6 pixels rc2.right -= 2; // and without messing with the border of the cell // Set references CDC cdc; cdc.CreateCompatibleDC(cd->nmcd.hdc); HBITMAP pOldBmp = cdc.SelectBitmap(CreateCompatibleBitmap(cd->nmcd.hdc, rc.Width(), rc.Height())); HDC& dc = cdc.m_hDC; HFONT oldFont = (HFONT)SelectObject(dc, WinUtil::font); SetBkMode(dc, TRANSPARENT); CBarShader statusBar(rc.Height(), rc.Width(), SETTING(UPLOAD_BAR_COLOR), ii->getSize()); statusBar.FillRange(0, ii->getPos(), SETTING(COLOR_DONE)); statusBar.Draw(cdc, 0, 0, SETTING(PROGRESS_3DDEPTH)); SetTextColor(dc, SETTING(PROGRESS_TEXT_COLOR_UP)); ::ExtTextOut(dc, rc2.left, rc2.top + (rc2.Height() - WinUtil::getTextHeight(dc) - 1)/2, ETO_CLIPPED, rc2, buf, _tcslen(buf), NULL); SelectObject(dc, oldFont); BitBlt(cd->nmcd.hdc,rc.left, rc.top, rc.Width(), rc.Height(), dc, 0, 0, SRCCOPY); DeleteObject(cdc.SelectBitmap(pOldBmp)); return CDRF_SKIPDEFAULT; } // Fall through default: return CDRF_DODEFAULT; } }