Пример #1
0
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);

}
Пример #2
0
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));
}
Пример #3
0
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;
}