Toon posts:

[Win32/VC++] Pest aan visual!?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Beetje vaag onderwerp, maar op een of andere manier vind ik het lekkerder om niet visual te programmeren. De reden hiervoor is dat als je alleen code hebt het overzichtelijker is.

Maar,... nu ik wat bezig ben met onze geliefde win32 functie CreateWindowEx() stuiter je wel eens tegen problemen aan die je niet hebt met je windows in resources.

Ik heb bijvoorbeeld een main-window gemaakt met daarop een editbox en een button. Prachtig, nix aan de hand, we kunnen tekst invoeren en op de knop drukken. Als we willen dat, als we op enter drukken in de editbox, er (in prinicipe) op de button gedrukt wordt, denk je. No problem, even de WM_KEYDOWN message afhandelen in de WindowProc van de... ehh editbox. Maar dat kan alleen met subclassing van de procedure (zeg alsjeblieft dat dit niet waar is).

En zo begint de start van het bekende "Erom-heen programeren". En als we ergens de pest aan hebben is het dat wel.

Nu wilde ik graag weten wat jullie hiervan vinden.
Hoop dat ik duidelijk ben.

Alvast bedankt!

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
ieder z'n meug :Z

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Ik roep het zelden, maar: RTFM.

'er omheen programmeren' is niet nodig. Verder verwar je win32 met MFC.

Verwijderd

MFC: the root of all evil :)
Als je makkelijk en snel een GUI wil maken, pak je maar Delphi of VB ofzo :P

Verwijderd

Ik roep het zelden, maar: RTFM.
Inderdaad. Kijk maar eens bij Child window, WM_COMMAND, WM_NOTIFY en callback window function.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Professionele website nodig?


Verwijderd

Op maandag 11 maart 2002 10:00 schreef daxx909 het volgende:
MFC: the root of all evil :)
Als je makkelijk en snel een GUI wil maken, pak je maar Delphi of VB ofzo :P
Ondanks je :) is het imho onaanvaardbaar dat je hier gaat flamen zonder argumenten te geven. :)

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

pest aan visual? probeer dan eens borland :)

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


Verwijderd

Op maandag 11 maart 2002 12:06 schreef curry684 het volgende:
Klik Hier
Yes een link naar borland, die hebben die hele fijne vcl. Als er nou iets troep is, is het dat wel...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 11 maart 2002 12:10 schreef markvleth het volgende:
Yes een link naar borland, die hebben die hele fijne vcl. Als er nou iets troep is, is het dat wel...
Waarom?

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:57
Ja, wat vind jij niet goed aan die VCL ? Ik vind hem super.

https://fgheysels.github.io/


Verwijderd

kijk anders es naar wtl,dat is een heel dun oo laagje op de win32 api.

Verwijderd

Topicstarter
Mag ik eerlijk zeggen dat ik de reacties niet helemaal ok vind?

Verder vind ik persoonlijk Visual C++ lekkerder werken dan Borland, MAAR daar gaat het nu niet om, hier zijn al zoveel onzinnige discussies over geweest :(

Verder weet ik niet precies hoe de resources werken in VC++. Zijn deze allemaal gebaseerd op de functies van WIN32?
Dit betekend dus niet met omwegen programeren, maar hoe kun je dan anders dan subclassing achter toetsen in een editbox of ander predefined controls komen? Ga dan alsjeblieft niet van die loze dingen roepen als Inderdaad. Kijk maar eens bij Child window, WM_COMMAND, WM_NOTIFY en callback window function. Want daarmee KAN HET NIET. En als dat wel kan zeg dan HOE.

En wat er bedoelt wordt RTFM.... :?
Ik denk dat ik al menig dagen op internet gezocht heb, MSDN erop nagezocht. Dus dat is NIET terecht dat men dat zegt.

Ik hoop niet dat ik meer van deze onzin berichten krijg want dan heb ik het hier wel bekeken :(

(sorry voor degenen die wel proberen serieus te helpen)

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:57
Wat bedoel je dan eigenlijk?

Wil je een discussie starten over het feit dat je liever alles in code ontwikkelt dan dat je mbhv een RAD (Delphi, VB, C++ Builder) omgeving aan de slag gaat?
Dat is toch hetgeen ik zo een beetje uit uw eerste post kan opmaken

Mijn gevoelens hierover zijn een beetje gemengd;

Met een RAD heb je heel snel uw user-interface in elkaar geklikt en kan je je meer gaan concentreren op de functionaliteiten van uw programma zelf.
Momenteel ben ik bezig met C# te leren en aangezien ik VS.NET niet heb gekocht, moet ik wel met behulp van een 3rd party editor alle code schrijven voor m'n interface. Geen drag'n drop situaties dus. Ik zie er niet tegenop om al die code te gaan schrijven maar het moet wel gezegd zijn dat er veel meer tijd inkruipt in het ontwikkelen van een app.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Nee, die richting wil ik niet helemaal op - maar ben het wel helemaal met je eens - maar meer specifieker in C++. Ik wilde eens weten of ik niet ver van de standaards af ga als ik alleen mbv code in VC++ windowtjes en items daarin ga maken. Ik ben eens begonnen daarmee en loop wat tegen wat probleempjes op (lees eerste bericht) daarom ben ik eens aan het zoeken gegaan maar ben eigenlijk nergens iets tegen gekomen zonder de resources of MFC. Nu wilde ik weten of jullie hier ook een of ander mee beleeft hebben...

Bedankt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:57
Ik heb nog nooit puur Win32 geprogrammeerd mbhv C/C++ of gelijk welke andere taal ooit Zo masochistisch ben ik nu ook weer niet, maar dit terzijde en van MFC heb ik ook maar weinig geproefd gewoon omdat ik er niet zo graag mee werk.
Maar als je alles puur Win32 wilt doen, dan moet je maar eens zoeken naar broncode van Windowsprogramma's die vroeger in plain C of C++ geschreven werden, nog voor er sprake was van de MFC en RAD-tools. En ik denk dat het boek 'Programming Windows' van Charles Petzold je ook wel zal bekoren.

https://fgheysels.github.io/


Verwijderd

Op maandag 11 maart 2002 18:50 schreef BobKid het volgende:
Mag ik eerlijk zeggen dat ik de reacties niet helemaal ok vind?
Ik vond de vraag ook bizar triest.
Verder weet ik niet precies hoe de resources werken in VC++. Zijn deze allemaal gebaseerd op de functies van WIN32?
Dit betekend dus niet met omwegen programeren, maar hoe kun je dan anders dan subclassing achter toetsen in een editbox of ander predefined controls komen? Ga dan alsjeblieft niet van die loze dingen roepen als Inderdaad. Kijk maar eens bij Child window, WM_COMMAND, WM_NOTIFY en callback window function. Want daarmee KAN HET NIET. En als dat wel kan zeg dan HOE.
je window heeft automatisch een messagehandler. ALLE events in een window komen in die messagehandler terecht. Je kunt dus in die handler de messages afvangen, bv returnkey of andere dingen (klikken op de button bv). Bare bones win32 gui programming is de laagste layer waarop je win32 gui's kunt bouwen. Het is _ERG_ veel werk. (been there, done that). MFC helpt je al een heel eind (net als de borland classes die er op lijken). Je hoeft in win32 dus niets te subclassen want er VALT niets te subclassen: als je de returnkey wilt afvangen in een editbox, krijg je de returnkey als message in je window's messagehandler. Je kunt eventueel een messagehandler aan je editbox hangen en ze daar aanhangen, maar dat is ook erg veel werk.

Je moet dus niet EN weinig willen programmeren EN bare bones win32 gui spul willen programmeren. Dat gaat namelijk niet samen.
En wat er bedoelt wordt RTFM.... :?
Ik denk dat ik al menig dagen op internet gezocht heb, MSDN erop nagezocht. Dus dat is NIET terecht dat men dat zegt.
Raar, ik vind/vond dat soort info toch wel.
Ik hoop niet dat ik meer van deze onzin berichten krijg want dan heb ik het hier wel bekeken :(
(sorry voor degenen die wel proberen serieus te helpen)
Ik BEN serieus. Met de manual in de hand is elke gui te bouwen. In win32 moet je echter wel veel doen en hard werken om het allemaal 'makkelijk' in elkaar te zetten. MFC is niet voor niks bedacht. Je messagehandler en je dialog init routines worden kilometers lang, of je verzandt in het kloppen van echt heel veel subroutines. Zeker als je een wat geavanceerde gui maakt zoals het disablen van controls als de user iets aanklikt / selecteert. Message afvangen, hander routine aanroepen, al die controls messages sturen... daar word je niet blij van.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 08:26

.oisyn

Moderator Devschuur®

Demotivational Speaker

ik zie nog steeds het probleem van het gebruik van resources niet :?

naar mijn idee is werken met resources een stuk makkelijker dan allerlei windootjes aanmaken met CreateWindow. En het enige wat je met resources doet is zeggen waar de windootjes komen te staan op de parent window, eventhandling enzo moet je er nog helemaal omheen coden mbv window procedures. Lijkt me niets 'visuals' aan eigenlijk

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 11 maart 2002 20:21 schreef Otis het volgende:
Ik vond de vraag ook bizar triest.
Check.

Hij komt een beetje een kankerverhaal plaatsen zonder enige onderbouwing of vooral: richting. Ook bij het voor de 3e keer nalezen van BobKid's eerste post kan ik niet aan de indruk ontsnappen dat ie geen idee heeft waar ie het zelf over heeft en alleen maar wat frustraties loslaat over de moeilijkheid van z'n eigen leerproces... :?

Professionele website nodig?


Verwijderd

curry: I second that (dat 'K*nker' voortaan laten aub). :) Win32 gui programming is zwaar, zeer zwaar, en het kost bakken met tijd voordat je alle ins en outs kent. "even een schermpie bakken" is er niet bij. Ja, dat is frustrerend idd. Maar ik denk dat we allemaal hier wel die horrorstories kennen :) ("Hoe disable ik een control? Ah! EnableWindow(hControlHandle, false)! ja logisch natuurlijk!")

  • durkagain
  • Registratie: April 2000
  • Laatst online: 12-04 16:38
Op maandag 11 maart 2002 20:21 schreef Otis het volgende:

je window heeft automatisch een messagehandler. ALLE events in een window komen in die messagehandler terecht. Je kunt dus in die handler de messages afvangen, bv returnkey of andere dingen (klikken op de button bv). Bare bones win32 gui programming is de laagste layer waarop je win32 gui's kunt bouwen. Het is _ERG_ veel werk. (been there, done that). MFC helpt je al een heel eind (net als de borland classes die er op lijken). Je hoeft in win32 dus niets te subclassen want er VALT niets te subclassen: als je de returnkey wilt afvangen in een editbox, krijg je de returnkey als message in je window's messagehandler. Je kunt eventueel een messagehandler aan je editbox hangen en ze daar aanhangen, maar dat is ook erg veel werk.
Die messagehandler, bedoel je daarmee de windowproc functie, die je aan de WNDCLASS(EX) kunt meegeven? Zo ja, bij editboxen gebruik je een voor gedefinieerde class. Ik neem aan dat deze zelf een WindowProc heeft die bv toetsen afhandelt om in de editbox weer te geven. Dus hoe kom ik, hoe kan ik aan die WindowProc komen. Hoe kan ik het WM_KEYDOWN message ontvangen? Deze komt niet in het parentwindow waarvan ik wel een WindowProc heb omdat ik de WNDCLASS(EX) zelf gemaakt heb.
Dat is mijn probleem daarmee eigenlijk.

Nogmaals bedankt...

Verwijderd

Topicstarter
Shit Shit Shit, weer onder de verkeerde persoon een bericht verstuurt, DumbAssDurruk ben ik, althans ik gebruik zijn pc nu even...

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:57
Op maandag 11 maart 2002 22:37 schreef Dumb Ass Durruk het volgende:
lap tekst
Waarom heb jij een kloon?

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:57
Op maandag 11 maart 2002 22:38 schreef BobKid het volgende:
Shit Shit Shit, weer onder de verkeerde persoon een bericht verstuurt, DumbAssDurruk ben ik, althans ik gebruik zijn pc nu even...
Jullie hebben alleszins hetzelfde mail-adres.

https://fgheysels.github.io/


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 11-09 23:14
Ow, ik geloof dat je m'n reply niet zo aardig vond...
Terwijl ik toch een beetje probeerde te helpen door je enkele relevante begrippen te noemen. Deze zaken zijn nogal essencieel, dus ik raad je toch aan om op msdn te kijken bij "user interface services". En als je dat wilt heb ik anders nog wel een setje html-documenten liggen (e-book) waar het geheel wat duidelijker in besproken wordt (en nog wat meer ook). Ik kan alleen niet vast stellen of het wel legaal is, dus ik kan hier geen link plaatsen..

Resources? Wel, die bestaan uit verschillende zaken: stukken tekst, iconen, bitmaps, versie informatie, templates voor dialoogvensters, etc. Met een resource-editor kan je resources aan een binary toevoegen. Als je bijvoorbeeld met de resource-editor een schermpje in elkaar zet, dan kan je dit met een paar opdrachten op het scherm plaatsen (scheelt weer een aantal CreateWindowEx'en). Je moet echter nog steeds de callback procedure schrijven.

[edit] Ow, OiSyN had dit eigenlijk al opgeschreven (offline tikken van tekst is niet altijd even handig). Ik kan overigens bevestigen dat het inderdaad veel werk is om even een windowtje in elkaar te flanzen. Ik had bijvoorbeeld maar een window met drie knoppen maar er zaten ook nog wat timers enzo achter en voor je het weet heb je toch aardig wat regels die knoppen enablen, disables, etc. Je hoeft overigens niet alle events zelf op te vangen, voor een hele boel niet relevante events heb je een standaard callback procedure (DefWndProc).
Ik weet niet of iemand die dit leest wel eens op een macintosh (<= OS9) een schermpje gebouwd heeft? Als je het programmeren van een event-handler voor visual C veel werk vind, moet maar eens een mac aanschaffen >:)

Tja, ik ben zelf met Java begonnen (maar gebruik gebruik nog altijd C in plaats van C++) en dan denk ik bij schermpjes eigenlijk altijd aan een layout-manager die netjes de controls voor je plaatst. Deze zul je dan echter zelf wel moeten schrijven.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 11-09 23:14
Op maandag 11 maart 2002 22:37 schreef Dumb Ass Durruk het volgende:
...wndclassex...
Het mooie van zo'n common control is dat hij zelf dingen als een letter plaatsen afhandeld en je dat dus niet zelf allemaal hoeft te regelen. Dus ik weet niet wat voor speciale functionaliteit je wilt, maar als je gewoon een invoervakje wilt zou ik het bij aanroepen als SetWindowText en GetWindowText houden (of andere daarvoor bedoelde macro's en functies). Hierbij komt ook de WM_COMMAND mesage weer kijken... (user interface services->controls->edit controls).

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 11-09 23:14
Maar ik denk dat we allemaal hier wel die horrorstories kennen :) ("Hoe disable ik een control? Ah! EnableWindow(hControlHandle, false)! ja logisch natuurlijk!")
Hoe hide ik een control??? Met ShowWindow(hWnd, SW_HIDE)! Ja logisch natuurlijk!

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 11 maart 2002 22:54 schreef Infinitive het volgende:
Hoe hide ik een control??? Met ShowWindow(hWnd, SW_HIDE)! Ja logisch natuurlijk!
Echt niet, dat doe je met AnimateWindow(hWnd, 0, AW_HIDE) :P

En de echte pret komt zodra je op je eigen DC's wil gaan tekenen :+

Professionele website nodig?


Verwijderd

Op maandag 11 maart 2002 23:20 schreef curry684 het volgende:

[..]

Echt niet, dat doe je met AnimateWindow(hWnd, 0, AW_HIDE) :P
haha :) ok. :)
En de echte pret komt zodra je op je eigen DC's wil gaan tekenen :+
Dat is leuk ja :) Of een OpenGL rendercontext op een button plakken :)

Die DC's zijn een leuke bron voor avondlange debugsessies en irritante memoryleaks hehe :) (oh, je mag die brush niet zomaar sharen? )

Verwijderd

Op maandag 11 maart 2002 22:54 schreef Infinitive het volgende:
[..]
Hoe hide ik een control??? Met ShowWindow(hWnd, SW_HIDE)! Ja logisch natuurlijk!
Ja prutser die ik ben, ik bedoelde natuurlijk disablen. *kickselfinteeth*

Verwijderd

Topicstarter
... Dumb Ass Durruk is mijn broer, en zijn PC stond 'toevallig' aan , dus mooie reply maken en vetgeten onder een andere naam het bericht te posten ...
Op maandag 11 maart 2002 22:50 schreef Infinitive het volgende:

[..]

Het mooie van zo'n common control is dat hij zelf dingen als een letter plaatsen afhandeld en je dat dus niet zelf allemaal hoeft te regelen. Dus ik weet niet wat voor speciale functionaliteit je wilt, maar als je gewoon een invoervakje wilt zou ik het bij aanroepen als SetWindowText en GetWindowText houden (of andere daarvoor bedoelde macro's en functies). Hierbij komt ook de WM_COMMAND mesage weer kijken... (user interface services->controls->edit controls).
Die basis dingen (ShowWindow/EnableWindow) weet ik wel, en is snel op te zoeken (Mits je het 1 keer gevonden hebt), zoals een text in of uit een iets halen. (Natuurlijk weet ik 'alle' ins en outs nog niet)
Maar ik ben met een chatboxje bezig (met sockets) en als je op enter drukt moet hij de text versturen die in de edit box staat. Ik bedoel, steeds met de muis dan naar de verzend knop gaan is ook niet alles, dus het principe van een default button. Deze button kun je wel maken met een window style, maar dan werkt het natuurlijk nog niet.
Om de vraag wat algemener te houden, vraag ik dus niet alleen hoe je zo'n default button maakt, maar hoe je bijvoorbeeld aan de messages voor een common control kunt komen. Of kan het anders en is dit niet de gewone gang van zaken, gebruik je een common control nu verkeerd?

Ok. (nu wel met BobKid verstuurd :?

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Dat vind ik handig aan Borland C++ Builder: die heeft een tamelijk uitgebreide help. Ik gebruik niet vaak die helpfuncties maar bij borland vind ik het ideaal.
Maar dat komt natuurlijk omdat ik nog niet zo lang programmeer in C++ :)

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 08:26

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 12 maart 2002 08:38 schreef BobKid het volgende:
... Dumb Ass Durruk is mijn broer, en zijn PC stond 'toevallig' aan , dus mooie reply maken en vetgeten onder een andere naam het bericht te posten ...
[..]

Die basis dingen (ShowWindow/EnableWindow) weet ik wel, en is snel op te zoeken (Mits je het 1 keer gevonden hebt), zoals een text in of uit een iets halen. (Natuurlijk weet ik 'alle' ins en outs nog niet)
Maar ik ben met een chatboxje bezig (met sockets) en als je op enter drukt moet hij de text versturen die in de edit box staat. Ik bedoel, steeds met de muis dan naar de verzend knop gaan is ook niet alles, dus het principe van een default button. Deze button kun je wel maken met een window style, maar dan werkt het natuurlijk nog niet.
Om de vraag wat algemener te houden, vraag ik dus niet alleen hoe je zo'n default button maakt, maar hoe je bijvoorbeeld aan de messages voor een common control kunt komen. Of kan het anders en is dit niet de gewone gang van zaken, gebruik je een common control nu verkeerd?

Ok. (nu wel met BobKid verstuurd :?
als je het echt wilt weten: editcontrol aanmaken, windowproc opvragen, eigen windowproc zetten, en in je nieuwe windowproc de oude aanroepen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 12:40

The End

!Beginning

Op dinsdag 12 maart 2002 09:07 schreef cobratbq het volgende:
Dat vind ik handig aan Borland C++ Builder: die heeft een tamelijk uitgebreide help. Ik gebruik niet vaak die helpfuncties maar bij borland vind ik het ideaal.
Maar dat komt natuurlijk omdat ik nog niet zo lang programmeer in C++ :)
Visual Studio heeft ook een "tamelijk" uitgebreide help hoor. (MSDN is groter dan Visual Studio zelf...)

Om nog even door te gaan:
Disable een scrollbar: EnableScrollBarCtrl(SB_HORZ,false) :)
Pagina: 1