Custom scrollbar

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Custom scrollbar

Post by mesajflaviu » 14 Jan 2015, 16:31

Ce solutie ar fi sa customizez scrollbar-ul unui control ? Am gasit ceva aici, si am incercat sa cusomizez scrollbar-ul unui gridcontrol ... incercarea este atasata ca aplicatie de test ... arata naspa, dar o mai luam eu la pila, daca mergea in aplicatia reala ... insa, acel grid-control, imi trebuie intr-un dialogbar (in situatia reala), si in momentul cand am implementat Solutia de mai sus in dialogbar, toate au luat-o razna (anomalii de focus, de redesenare, etc.) ... banui ca din cauza functiilor globale folosite de aceasta solutie ...

Intrebarea mea este, ce alte slutii ar fi pentru customizarea scrollbar-ului standard pentru un control windows ? Orice idee, link, indrumare, ar fi superbine venita !

Multumesc anticipat.
Attachments
TestGridWithSkinScroll.zip
(189.46 KiB) Downloaded 149 times



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Custom scrollbar

Post by Ovidiu Cucu » 17 Jan 2015, 12:34

Tot nu ne-am lasat de macelarit gridul lui Chris...
Mizeriile alea de "custom scrollbar" luate de la Codeproject stau pe grid ca nuca pe perete. :)
Pana gasim o solutie, vezi si raspunsul de la Codeguru: http://forums.codeguru.com/showthread.p ... ost2172331

De curiozitate, la ce bun sa schimbi culoarea la scrollbar?

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Custom scrollbar

Post by mesajflaviu » 18 Jan 2015, 20:51

In acel dialogbar am pus un CGridCtrl (un pic customizat) pentru a face o lista cu item-uri text, bitmap-uri, etc., totul pe fond negru ... Functioneaza, dar sefului meu nu-i place scrollbar-ul standard ... m-a pus sa-l fac negru/gri ... si la asta imi storc neuronul ...

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Custom scrollbar

Post by Ovidiu Cucu » 19 Jan 2015, 09:22

Spune-i ca de la primavara nu se mai poarta scrollbarurile negru-gri. :)

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Custom scrollbar

Post by mesajflaviu » 19 Jan 2015, 10:48

Daca as putea, i-as spune-o ! :biggrin:

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Custom scrollbar

Post by Ovidiu Cucu » 19 Jan 2015, 19:17

Problema e daca merita sau nu efortul de a schimba ceva in aspectul standard. Daca se da o caruta de parale, atunci da, merita. :)
Initial ma gandeam sa-ti spun sa tratezi WM_NCPAINT si sa desenezi acolo scrollbar-urile. Am icercat insa si nu merge. Altceva n-am gasit inca.
Arunca un ochi in MSDN la Visual Styles.
N-am prea sapat pe-acolo insa presupun ca ai putea sa schimbi tema unei fereste cu una cu scrollbar-uri care a arate asa cum vrea sefu.

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Custom scrollbar

Post by mesajflaviu » 20 Jan 2015, 10:26

ai putea sa schimbi tema unei fereste cu una cu scrollbar-uri care a arate asa cum vrea sefu
Incerc sa vad ce iese ...

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Custom scrollbar

Post by mesajflaviu » 21 Jan 2015, 16:56

Cred ca nu sant departe:

Code: Select all

void CGridCtrlExt::OnDraw(CDC* pDC)
{
    // draw the grid

	HTHEME hTheme = OpenThemeData(m_hWnd, L"WINDOW");
	if(NULL != hTheme)
	{
		CRect rect;
		GetClientRect(&rect);
		DrawThemeBackground(hTheme, pDC->GetSafeHdc(), WP_VERTSCROLL, VSS_NORMAL, &rect, NULL);
		CloseThemeData(hTheme);
	}
}
Nu functioneaza inca, dar cred ca asta e drumul ...

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Custom scrollbar

Post by mesajflaviu » 22 Jan 2015, 12:26

Am incercat in modul urmator:

Code: Select all

	HTHEME hTheme = OpenThemeData(m_hWnd, L"WINDOW");
//	HTHEME hTheme = OpenThemeData(m_hWnd, L"MFCGridCtrl");
	if(NULL != hTheme)
	{
		CScrollBar* pScrollbar = GetScrollBarCtrl(SB_VERT);
		if(NULL != pScrollbar->GetSafeHwnd()) // <-- is always null
		{
			CRect rect;
			pScrollbar->GetWindowRect(&rect);
			pDC->FillSolidRect(&rect, RGB(255, 255, 0));
			DrawThemeBackground(hTheme, pDC->GetSafeHdc(), WP_VERTSCROLL, VSS_NORMAL, &rect, NULL);
		}
		CloseThemeData(hTheme);
	}
insa nu pare sa stie de scrollbar-ul vertical, CScrollBar* pScrollbar = GetScrollBarCtrl(SB_VERT); returneaza intotdeauna NULL ... de ce ?
Ciudat ...

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Custom scrollbar

Post by mesajflaviu » 23 Jan 2015, 13:47

Desi totul pare correct, totusi nu functioneaza :D

Code: Select all

void CGridCtrlExt::OnDraw(CDC* pDC)
{
//	draw the grid

	HTHEME hTheme = OpenThemeData(m_hWnd, L"WINDOW");
//	HTHEME hTheme = OpenThemeData(m_hWnd, L"MFCGridCtrl");
	if(NULL != hTheme)
	{
		if(WS_VSCROLL & GetStyle())
		{
			SCROLLBARINFO si;
			si.cbSize = sizeof(SCROLLBARINFO);
			GetScrollBarInfo(OBJID_VSCROLL, &si);
			CRect rect(si.rcScrollBar);
			pDC->FillSolidRect(&rect, RGB(255, 255, 0));
			DrawThemeBackground(hTheme, pDC->GetSafeHdc(), WP_VERTSCROLL, VSS_NORMAL, &rect, NULL);
		}
		CloseThemeData(hTheme);
	}
}

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Custom scrollbar

Post by mesajflaviu » 23 Jan 2015, 13:50

Ce e curios e ca, daca pun un rectangle cat clientul, vad doar galben in fata ochilor :))

Code: Select all

void CGridCtrlExt::OnDraw(CDC* pDC)
{
//   draw the grid

   HTHEME hTheme = OpenThemeData(m_hWnd, L"WINDOW");
//   HTHEME hTheme = OpenThemeData(m_hWnd, L"MFCGridCtrl");
   if(NULL != hTheme)
   {
      if(WS_VSCROLL & GetStyle())
      {
	CRect rect;
	GetClientRect(&rect);
	pDC->FillSolidRect(&rect, RGB(255, 255, 0));
	DrawThemeBackground(hTheme, pDC->GetSafeHdc(), WP_VERTSCROLL, VSS_NORMAL, &rect, NULL);
      }
      CloseThemeData(hTheme);
   }
}

mesajflaviu
Membru++
Membru++
Posts: 684
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Custom scrollbar

Post by mesajflaviu » 02 Feb 2015, 15:51

mesajflaviu wrote:Desi totul pare correct, totusi nu functioneaza :D

Code: Select all

void CGridCtrlExt::OnDraw(CDC* pDC)
{
//	draw the grid

	HTHEME hTheme = OpenThemeData(m_hWnd, L"WINDOW");
//	HTHEME hTheme = OpenThemeData(m_hWnd, L"MFCGridCtrl");
	if(NULL != hTheme)
	{
		if(WS_VSCROLL & GetStyle())
		{
			SCROLLBARINFO si;
			si.cbSize = sizeof(SCROLLBARINFO);
			GetScrollBarInfo(OBJID_VSCROLL, &si);
			CRect rect(si.rcScrollBar);
			pDC->FillSolidRect(&rect, RGB(255, 255, 0));
			DrawThemeBackground(hTheme, pDC->GetSafeHdc(), WP_VERTSCROLL, VSS_NORMAL, &rect, NULL);
		}
		CloseThemeData(hTheme);
	}
}
eu cred ca ar merge acest cod, dar, fiind pus in OnDraw, cred ca sistemul de operare redeseneaza dupa aceea din nou scrollbar-urile ...
Attachments
TestGrid.zip
(210.48 KiB) Downloaded 156 times

Post Reply