Page 2 of 2

Re: Acces dialog bar in CPreviewView

Posted: 02 Apr 2013, 14:05
by mesajflaviu
Am dat de o chestie ciudata: la un singur click pe scrollbar-ul din dialogbar:

Code: Select all

void CPreviewDlgBar::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default

	int nCurPos = m_scrollbarHorz.GetScrollPos();
	TRACE("CPreviewDlgBar::OnHScroll %d\n", nCurPos);
	return;
}
acest cod se executa de doua ori ... de ce ? Nu-i totuna, fiindca la fiecare click se face desenarea pe device context ....

Re: Acces dialog bar in CPreviewView

Posted: 02 Apr 2013, 14:36
by Viorel
Mai adaugă un TRACE care să afișeze nSBCode.

Re: Acces dialog bar in CPreviewView

Posted: 02 Apr 2013, 14:52
by mesajflaviu
Ok, am vazut ca odata nSBCode este SB_RIGHT si a doua oara este SB_ENDSCROLL (cand fac click pe sageata dreapta) ... Am rezolvat-o in modul urmator:

Code: Select all

void CPreviewDlgBar::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default

	if(SB_ENDSCROLL == nSBCode || SB_THUMBPOSITION == nSBCode)
		return;
	...
}
Multumesc.

Re: Acces dialog bar in CPreviewView

Posted: 04 Apr 2013, 09:55
by Ovidiu Cucu
Spusesem intr-un post anterior ca, in afara de metodele pe care le-am dat deja pentru handluirea lui WM_HSCROLL trimis de un slider dintr-un dialog bar, se poate si mai simplu.
Daca te uiti la definitia lui CPreviewView, vezi ca are niste membri m_pPrintView si m_pOrigView care tine pointeri la view-ul original.
Poti pune si seta in clasa derivata din CDialogBar unul dintre acesti pointeri, si prin intermediul lui accesezi view-ul original (printr-o metoda sau, mai bine ii trimiti un mesaj custom ca sa-i spui ca userul a umblat la slider).

Mai departe nu stiu exact ce vrei sa faci. Banui doar ca vrei sa faci zoom continuu in print preview. Daca-i asa, cred ca va trebui sa customizezi atat OnDraw in clasa derivata din CPreviewView (pentru a desena "foaia") cat si OnDraw din view-ul original pentru restul desenarii.

Re: Acces dialog bar in CPreviewView

Posted: 05 Apr 2013, 11:19
by mesajflaviu
Acum totul e OK, nu mai am nevoie de CChildFrame, iar de comunicat comunic doar prin mesaje intre CPreviewDlgBar, CPreviewViewExt si CTestDrawView ...

Re: Acces dialog bar in CPreviewView

Posted: 08 Apr 2013, 15:39
by mesajflaviu
As mai avea o intrebare, referitoare la scrollbar ... nu se produce scroll cand pun (apas) mouse-ul intre bara de scroll si marginile ei ... nu stiu de ce ... m-am tot uitat la proprietatile scrollbar-ului, le-am tot schimbat .. .fara nici un rezultat ... ce mai trebuie facut sa functioneze si aceasta caracteristica ?

Re: Acces dialog bar in CPreviewView

Posted: 10 Apr 2013, 08:06
by Ovidiu Cucu
Nu e clar. Despre ce scrollbar vorbesti?
Discutam aici despre handluit un slider, pus intr-un dialog bar, in print preview...

Re: Acces dialog bar in CPreviewView

Posted: 10 Apr 2013, 09:41
by mesajflaviu
Pe dialogbar-ul print preview-ului am pus scrollbar in loc de slider (asa a vrut clientul), care pana la urma este similar cu slider-ul d.p.d.v. al functinalitatii scroll-ului ...

Scroll-ul se poate face in mai multe feluri: apasand sagetile din capetele scroll-ului, actionand cu mouse-ul bara de scroll, dar ma asteptam sa pot face scroll si apasand mouse-ul intre bara de scroll si sageata din capatul opus barei de scroll ... dar asa nu merge scroll-ul ... nu stiu de ce ...

Image

Re: Acces dialog bar in CPreviewView

Posted: 11 Apr 2013, 18:35
by Ovidiu Cucu
Cum adica "nu merge scroll-ul"?
Controlul scrollbar nu trimite WM_HSCROLL?

Re: Acces dialog bar in CPreviewView

Posted: 12 Apr 2013, 10:18
by Ovidiu Cucu
Altfel spus, cred ca e destul de clar si am mai discutat asta aici: viewtopic.php?f=14&t=2245
Controlul scrollbar NU face el insusi scroll ci doar trimite mesaje WM_HSCROLL sau WM_VSCROLL parintelui, cu codul SB_LEFT, SB_THUMBTRACK, SB_PAGELEFT etc, in functie de ce face utilizatorul. Este treaba programatorului ce face cu ele mai departe.
In cazul cand utilizatorul da click in zona de care ai spus, ar trebui ca parintele sa primeasca WM_HSCROLL cu SB_PAGELEFT sau SB_PAGERIGHT plus SB_ENDSCROLL.

Deci, concret, ce nu merge?

Re: Acces dialog bar in CPreviewView

Posted: 15 Apr 2013, 09:16
by mesajflaviu
My mistake ... initializam scrollbar-ul cu CScrollBar::SetScrollRange (si nu ii spuneam cat sa fie pagina de scroll, iar din aceasta cauza pozitia cursorului se calcula gresit, intotdeauna 0), nu cu CScrollBar::SetScrollInfo ... acum si lungimea barei de scroll e proportionala cu range-ul ...