Acces dialog bar in CPreviewView

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

Re: Acces dialog bar in CPreviewView

Post by mesajflaviu » 02 Apr 2013, 14:05

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 ....



Viorel
Microsoft MVP
Microsoft MVP
Posts: 291
Joined: 13 Jul 2007, 12:26

Re: Acces dialog bar in CPreviewView

Post by Viorel » 02 Apr 2013, 14:36

Mai adaugă un TRACE care să afișeze nSBCode.

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

Re: Acces dialog bar in CPreviewView

Post by mesajflaviu » 02 Apr 2013, 14:52

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.

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

Re: Acces dialog bar in CPreviewView

Post by Ovidiu Cucu » 04 Apr 2013, 09:55

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.

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

Re: Acces dialog bar in CPreviewView

Post by mesajflaviu » 05 Apr 2013, 11:19

Acum totul e OK, nu mai am nevoie de CChildFrame, iar de comunicat comunic doar prin mesaje intre CPreviewDlgBar, CPreviewViewExt si CTestDrawView ...

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

Re: Acces dialog bar in CPreviewView

Post by mesajflaviu » 08 Apr 2013, 15:39

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 ?

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

Re: Acces dialog bar in CPreviewView

Post by Ovidiu Cucu » 10 Apr 2013, 08:06

Nu e clar. Despre ce scrollbar vorbesti?
Discutam aici despre handluit un slider, pus intr-un dialog bar, in print preview...

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

Re: Acces dialog bar in CPreviewView

Post by mesajflaviu » 10 Apr 2013, 09:41

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

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

Re: Acces dialog bar in CPreviewView

Post by Ovidiu Cucu » 11 Apr 2013, 18:35

Cum adica "nu merge scroll-ul"?
Controlul scrollbar nu trimite WM_HSCROLL?

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

Re: Acces dialog bar in CPreviewView

Post by Ovidiu Cucu » 12 Apr 2013, 10:18

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?

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

Re: Acces dialog bar in CPreviewView

Post by mesajflaviu » 15 Apr 2013, 09:16

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 ...

Post Reply