Avatar billede jackonlinux Nybegynder
10. marts 2003 - 08:31 Der er 27 kommentarer

SubClassing af Common Control

Jeg er ved at lave et activeX object hvor jeg benytter
CDC klassen. Jeg laver en speciel liste.
Jeg vil så gerne ha' at kontrollen kan benytte sig
af slidebar's når tekst og grafik når over sit rect.

Jeg har så set på SubClassing. Håber i kender det...

Problemet for mig er nu bare at jeg gerne vil resize min slidebar så den passer perfekt ind i min kontrol, men hvordan kan jeg styre kontrollen ?
Umiddelbart kan jeg godt sætte dens rcBounds til en variabel størrelse, men det ændrer naturligvis ikke på kontrollens størrelse, som fylder hele mit rect.
Nogen idéer?
Avatar billede jpk Nybegynder
10. marts 2003 - 08:35 #1
Hvilken kontrol er det lige du vil sub-class'e?
Avatar billede jackonlinux Nybegynder
10. marts 2003 - 08:37 #2
En CScrollBar.
Den understøttes af ActiceX
Avatar billede jpk Nybegynder
10. marts 2003 - 09:23 #3
Jeg er ikke med...
Hvilken funktionalitet er det du vil tilføje til CScrollBar'en?
Avatar billede jpk Nybegynder
10. marts 2003 - 09:26 #4
Du behøver jo ikke sub-classe en scrollbar for at bruge den i din kontrol...
Avatar billede jackonlinux Nybegynder
10. marts 2003 - 09:38 #5
nej jpk det mener jeg nemlig heller ikke. Man burde vel kunne oprette ny klasse, som nedarver funktionaliteten. Tilføje OnCreate til klassen + obj.Create(....) og derefter tegne den ikke ?
Avatar billede jpk Nybegynder
10. marts 2003 - 11:16 #6
Altså hvis du vil tilføje funktionalitet eller ændre på kontrollen (fx udseendet) bør du lave en nedarvning.

Hvis du blot vil bruge scrollbarens funktionalitet kan du bruge den direkte...
Avatar billede jackonlinux Nybegynder
10. marts 2003 - 11:27 #7
ok...
Kender du et sted hvor man kan finde eksempler eller små tutorials på dette?
Avatar billede jpk Nybegynder
10. marts 2003 - 12:12 #8
http://www.codeguru.com kan du finde alverdens kontroller med source kode, kig i menuen i venstre side.
Avatar billede jackonlinux Nybegynder
10. marts 2003 - 17:52 #9
Ja jeg kan nedarve en CScrollBar, men jeg synes ikke den kommer frem i min control. Når jeg gerne vil tegne sådan en common control går den ikke -der dukker ikke noget op.. Der er måske noget med CDC klassen?
Avatar billede jpk Nybegynder
11. marts 2003 - 09:11 #10
Hvilken type liste er det du laver?
Kan du ikke bruge CListBox til at bygge videre på?
CListBox har jo allered megen funktionalitet (også scrolling) som du kan bruge.
Du kan se eksempler på specialiseringer af CListBox på http://codeguru.earthweb.com/listbox/index.shtml
Avatar billede jackonlinux Nybegynder
11. marts 2003 - 09:40 #11
Ja det er jo så en der selv er udviklet specielt til et program vi selv har udviklet. Vi har så udviklet den som activeX kontrol -så vi kan vælge at opdatere flere "views"/acticeX på én gang.
Desværre blev vores kontrol lavet sådan at tekst/overskrift osv.. er lavet med CDC klassen. Min opgave er så at tilføje scrollbars i tilfælde af at kundens display er for småt.
Så jeg skal manuelt tegne de scrollbars.
Dvs. en listbox er out of scope.

Der skal implementeres med det i forvejen udviklede.
Avatar billede jpk Nybegynder
11. marts 2003 - 10:06 #12
Du skal IKKE tegne scrollbars manuelt!
En CScrollBar (ligesom andre kontroller) tegner sig selv...

Okay, hvis jeg har forstået rigtig, så gælder følgende:
- Kontrollen kan vise noget tekst
- Hvis teksten fylder mere i højden/bredden end der er plads til i kontrollen, skal der vises scroll bars

Bliver teksten ikke vist i et vindue på kontrollen eller er det selve kontrollens DC der bliver brugt til at tegne teksten på?
Avatar billede jackonlinux Nybegynder
11. marts 2003 - 10:18 #13
Det er DC som bliver benyttet.
Avatar billede jpk Nybegynder
11. marts 2003 - 11:26 #14
Er der andre kontroller i jeres kontrol?
Altså omfatter kontrollen edit boxes, knapper osv. eller er det hele vinduet der bruges til at vise teksten?
Avatar billede jackonlinux Nybegynder
11. marts 2003 - 11:34 #15
nej hele vinduet benyttes.
Så det er bare et spørgsmål om at jeg tegner sådan en scrollbar og så selv placerer den.
De beskeder som jeg så modtager kan jeg sagtens "handle"
Avatar billede jpk Nybegynder
11. marts 2003 - 11:49 #16
Alle vinduer/kontroller der nedarver fra CWnd har jo automatisk mulighed for at vise scrollbars, har du prøvet at slå Horizontal scroll/Vertical scroll til i resource-editoren?
Avatar billede jackonlinux Nybegynder
11. marts 2003 - 12:26 #17
hmm...
Avatar billede jpk Nybegynder
11. marts 2003 - 12:39 #18
Eller, hvis det er et vindue genereret vha. kode, så bruge styles WS_HSCROLL og/eller WS_VSCROLL...
Avatar billede jackonlinux Nybegynder
11. marts 2003 - 12:51 #19
YES YES YES!!!
Se nu får jeg dem frem. Hvordan linker jeg så dem til et object? Fordi nu er de jo så grafisk repræsenteret. Dvs. de er enabled. Kan jeg så ikke flytte dem til en ny position og så "koble" et object til dem?
Avatar billede jackonlinux Nybegynder
11. marts 2003 - 12:52 #20
CWnd::GetScrollBarCtrl 

i get it :)
Avatar billede jpk Nybegynder
11. marts 2003 - 12:55 #21
Du skriver ikke spor om hvad du har gjort for at få dem frem, det er altså ret svært at vide hvad du foretager dig!!!

Det burde jo ikke være nødvendigt at flytte dem og de er jo sansynligvis allerede koblet til et vindue!
Avatar billede jackonlinux Nybegynder
11. marts 2003 - 13:36 #22
Jamen jeg har kaldt
ModifyStyle(0, WS_HSCROLL);

Og så stiller CWnd resten af mulighedderne til rådighed
Avatar billede jpk Nybegynder
11. marts 2003 - 13:42 #23
Men jeg forstår ikke hvorfor det skulle være nødvendig at flytte scroll-baren..?

Du skal override OnHScroll i din kontrol og reagere deri.
Kald fx ScrollWindow for at scrolle vinduet.
Avatar billede jpk Nybegynder
18. marts 2003 - 07:47 #24
Har du fået løst problemet?
Avatar billede jackonlinux Nybegynder
19. marts 2003 - 15:01 #25
Det har godt nok været lidt i bero.
Men det med at jeg skal flytte min scroll-bar er fordi at jeg tegner en ramme omkring teksten.
De scrollbars skal så være indenfor denne ramme og -derefter skal teksten skrives.
Dvs. jeg skal redraw min ramme hver gang og så bagefter flytte teksten alt efter hvor meget der trykkes på de respektive scrollbars.
Avatar billede jpk Nybegynder
19. marts 2003 - 15:12 #26
Det er godt nok en besværlig måde!
Hvorfor viser du ikke teksten i et mindre vindue/kontrol og så tegner en ramme uden om det/den?
Avatar billede jackonlinux Nybegynder
02. april 2003 - 18:36 #27
Jo det ved jeg godt... men det er en meget speciel activeX control
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester