void CFastSplitter::OnPaint() { { CPaintDC _dc(this); // device context for painting } CClientDC dc(this); COLORREF color = m_colors[COL_Disabled]; if (m_mode == MOD_Normal) color = m_colors[m_bTracking ? COL_Tracking : COL_Normal]; //===Paint #1 //HBRUSH br = CreateSolidBrush(color); //HBRUSH oldBr = (HBRUSH)::SelectObject(dc.m_hDC, br); //dc.Rectangle(&GetSplitterRect(m_SplitterPos)); //::SelectObject(dc.m_hDC, oldBr); //===Paint #2 CRect rc = m_SplitterRect;//GetSplitterRect(m_SplitterPos); dc.FillSolidRect(&rc, color); HPEN oldPen = (HPEN)::SelectObject(dc.m_hDC, GetStockObject(DC_PEN)); ::SetDCPenColor(dc.m_hDC, RGB(128,128,128)); if (m_bVertSplitter) { dc.MoveTo(rc.left, rc.top); dc.LineTo(rc.left, rc.bottom); dc.MoveTo(rc.right, rc.top); dc.LineTo(rc.right, rc.bottom); } else { dc.MoveTo(rc.left, rc.top); dc.LineTo(rc.right, rc.top); dc.MoveTo(rc.left, rc.bottom); dc.LineTo(rc.right, rc.bottom); } ::SelectObject(dc.m_hDC, oldPen); //dc.FillSolidRect(&GetSplitterRect(m_SplitterPos), color); }
void CClosableTabCtrl::OnPaint(){ //CTabCtrl::OnPaint(); ModifyStyle(0, WS_CLIPCHILDREN); if( !m_pSpinCtrl ) { CWnd * pWnd = FindWindowEx( GetSafeHwnd(), 0, _T("msctls_updown32"), 0 ); if( pWnd ) { m_pSpinCtrl = new CSpinButtonCtrl; m_pSpinCtrl->Attach(pWnd->GetSafeHwnd()); } } BOOL aero=false; HMODULE hm=LoadLibrary(L"dwmapi.dll"); if(hm){ DWMISCOMPOSITIONENABLED* ic=(DWMISCOMPOSITIONENABLED*)GetProcAddress(hm, "DwmIsCompositionEnabled"); (ic)(&aero); FreeLibrary(hm); } RECT wrect; GetWindowRect(&wrect); int w=wrect.right-wrect.left; int h=TAB_HEIGHT+TAB_TOP_MARGIN; CPaintDC _dc(this); if(!_dc.m_hDC)return; CDC dc; dc.CreateCompatibleDC(&_dc); if(!dc.m_hDC){ ReleaseDC(&_dc); return; } CBitmap bmp; bmp.CreateCompatibleBitmap(&_dc, w, h); if(!bmp.m_hObject){ ReleaseDC(&_dc); ReleaseDC(&dc); return; } CBitmap* obmp=dc.SelectObject(&bmp); CFont fnt; fnt.CreateFontW(-11, 0, 0, 0, 0, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, L"Tahoma"); CFont* ofnt=dc.SelectObject(&fnt); dc.SetBkMode(TRANSPARENT); //skin.tabbarBG.bmp.DrawStretched(&dc, 0, 0, w, 20, 0, 0, 0, 0); if(!aero){ COLORREF bgcol=IsTopParentActive()?GetSysColor(COLOR_ACTIVECAPTION):GetSysColor(COLOR_INACTIVECAPTION); dc.FillSolidRect(0, 0, w, h, bgcol); } int offset=5; if(m_pSpinCtrl){ int p=LOWORD(m_pSpinCtrl->GetPos()); for(int i=0;i<p;i++){ offset-=itemWidths[i]; } } itemWidths.clear(); int totalWidth=5; for(int i=0;i<GetItemCount();i++){ TC_ITEM item; memset(&item, 0, sizeof(TC_ITEM)); item.mask=TCIF_TEXT|TCIF_IMAGE|TCIF_PARAM; item.pszText=new wchar_t[512]; item.cchTextMax=512; GetItem(i, &item); int tw=dc.GetTextExtent(item.pszText, wcslen(item.pszText)).cx+40; RECT rect; rect.top=TAB_TOP_MARGIN; rect.bottom=h; rect.left=offset; rect.right=offset+tw; CTalkTab* tab=(CTalkTab*)item.lParam; totalWidth+=tw; if(i==this->GetCurSel()){ skin.tabActive.bmp.DrawStretched(&dc, offset, TAB_TOP_MARGIN, tw, TAB_HEIGHT, 0, 0, 0, 0); dc.SetTextColor(skin.tabActiveTextColor); }else if(over_idx==i){ skin.tabOver.bmp.DrawStretched(&dc, offset, TAB_TOP_MARGIN, tw, TAB_HEIGHT, 0, 0, 0, 0); //dc.SetTextColor(skin.tabOverTextColor); dc.SetTextColor(IsTopParentActive()?GetSysColor(COLOR_CAPTIONTEXT):GetSysColor(COLOR_INACTIVECAPTIONTEXT)); }else{ skin.tabInactive.bmp.DrawStretched(&dc, offset, TAB_TOP_MARGIN, tw, TAB_HEIGHT, 0, 0, 0, 0); //dc.SetTextColor(skin.tabIncativeTextColor); dc.SetTextColor(IsTopParentActive()?GetSysColor(COLOR_CAPTIONTEXT):GetSysColor(COLOR_INACTIVECAPTIONTEXT)); } HICON hIcon=skin.iconUnknown; bool newmsg=false; if(tab){ newmsg=tab->hasNewMsg; if(newmsg){ hIcon=skin.iconNewMsg; } } if(item.iImage>0 && !newmsg){ bool inList=false; for(int j=0;j<con.clDlg->friendList.items.size();j++){ if(con.clDlg->friendList.items[j].uid==item.iImage){ inList=true; break; } } if(inList){ if(con.clDlg->friendList.items[con.clDlg->friendList.GetItemByUID(item.iImage)].online){ hIcon=skin.iconOnline; }else{ hIcon=skin.iconOffline; } } } if(tab){ if(tab->tabProxy)tab->tabProxy->SetIcon(hIcon, false); } DrawIconEx(dc.GetSafeHdc(), offset+2, TAB_HEIGHT/2+TAB_TOP_MARGIN-8, hIcon, 16, 16, 0, NULL, DI_NORMAL); if(i==this->GetCurSel()){ skin.tabCloseAct.DrawUnscaled(&dc, offset+tw-18, TAB_HEIGHT/2+TAB_TOP_MARGIN-8, 15, 15, 0, 0); }else{ skin.tabCloseInact.DrawUnscaled(&dc, offset+tw-18, TAB_HEIGHT/2+TAB_TOP_MARGIN-8, 15, 15, 0, 0); } if(!aero){ dc.DrawText(item.pszText, wcslen(item.pszText), &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); }else{ if(i==this->GetCurSel()){ CUtils::DrawAeroText(rect, &dc, 0, DT_CENTER|DT_VCENTER|DT_SINGLELINE, &fnt, item.pszText); }else{ CUtils::DrawAeroText(rect, &dc, 3, DT_CENTER|DT_VCENTER|DT_SINGLELINE, &fnt, item.pszText); } } delete item.pszText; offset+=tw+TAB_SPACING; itemWidths.push_back(tw); } _dc.BitBlt(0, 0, w, h, &dc, 0, 0, SRCCOPY); dc.SelectObject(obmp); dc.SelectObject(ofnt); ReleaseDC(&dc); ReleaseDC(&_dc); SetItemSize(CSize(totalWidth/GetItemCount(), 20)); }
LRESULT CHtmlColorCtrl::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { CPaintDC _dc(m_hWnd); CMemoryDC dc(_dc.m_hDC, _dc.m_ps.rcPaint); RECT rcClient; GetClientRect(&rcClient); dc.FillSolidRect(&rcClient, RGB(255,255,255)); for( int i=0; i<LINE_COUNT; i++ ) { for( int j=0; j<COL_COUNT; j++ ) { CRect rc( BOX_SIZE*j, BOX_SIZE*i, (j+1)*BOX_SIZE, (i+1)*BOX_SIZE ); rc.DeflateRect(1,1); if( i==m_ptMouse.y && j==m_ptMouse.x ) { HPEN hOld=dc.SelectPen( (HPEN)GetStockObject(DC_PEN) ); dc.SetDCPenColor( RGB(0,0, 255) ); rc.InflateRect(1,1); dc.Rectangle(&rc); rc.DeflateRect(1,1); dc.Rectangle(&rc); dc.SelectPen(hOld); } else { dc.Rectangle(&rc); } rc.DeflateRect(2,2); dc.FillSolidRect(&rc, GetWebColor(s_color[i][j])); } } if( m_ptMouse.x>=0 && m_ptMouse.x<COL_COUNT && m_ptMouse.y>=0 && m_ptMouse.y<LINE_COUNT ) m_clr=s_color[m_ptMouse.y][m_ptMouse.x]; dc.SelectFont(m_font); CRect rcText(0, LINE_COUNT*BOX_SIZE, COL_COUNT*BOX_SIZE, LINE_COUNT*BOX_SIZE+20); rcText.DeflateRect(1,1); dc.Rectangle(&rcText); rcText.DeflateRect(2,2); int r=(m_clr&0xFF0000)>>16; int g=(m_clr&0x00FF00)>>8; int b=m_clr&0xFF; COLORREF clrBk=RGB(r, g, b); COLORREF clrFg=RGB(0xFF-r, 0xFF-g, 0xFF-b); TCHAR szText[10]= {0}; SecureHelper::sprintf_x(szText, 10, L"%02X%02X%02X", r,g,b); dc.FillSolidRect(&rcText, clrBk); dc.SetBkMode(TRANSPARENT); dc.SetTextColor(clrFg); dc.DrawText(szText, lstrlen(szText), &rcText, DT_CENTER|DT_VCENTER|DT_SINGLELINE); CRect rcBtn=rcClient; rcBtn.top=rcText.bottom+2; rcBtn.DeflateRect(1,1); dc.Rectangle(&rcBtn); if( m_bOnButton ) { rcBtn.DeflateRect(2,2); dc.FillSolidRect(&rcBtn, RGB(192,192,192)); } dc.SetTextColor(0); dc.DrawText(L"...", 3, &rcBtn, DT_CENTER|DT_VCENTER|DT_SINGLELINE); return 0; }