Gå til innhold

Win32 gui foundation klasser


Anbefalte innlegg

Jeg var aldri videre glad i MFC, da det var alt for tunggrodd. Gikk heller aldri inn på å bruke andre løsninger, som WTL, Qt, wxWidgets eller lignende. Gjennom årene har jeg brukt en kombinasjon av egenskrevede klassesett og rent win32-api (sistnevnte er så absolutt ingen fryd, hva effektiv programmering angår).

 

Nå har jeg tråkket litt til på en ny generasjon av guiklassene mine, hvor jeg har revurdert flere av aspektene fra tidligere versjoner, samt hentet litt inspirasjon fra f.eks. C#/.NET og lignende.

 

Til tross for at jeg følger prinsippet med å legge til features når jeg trenger det, så ser jeg verdien i å ha ekstrahjelp. Så, i den anledning; er det noen som har lyst til å ta del i utviklingen? Jeg ser helst at den/de som deltar har gode designkunnskaper, og kjenner de viktigste prinsipper innen OO, i tillegg til å kunne skrive kreativ C++-kode. Om ikke annet blir det en mulighet til å diskutere designfundamenter med andre :)

Lenke til kommentar
Videoannonse
Annonse

Yes. Følger i samme sjanger som Qt, wxWidgets, MFC and so forth (i motsetning til de to første har jeg ikke brydd meg om plattformuavhengighet).

 

Dytter gjerne ut code samples, men ville helst ha litt tilbakemelding her først, for å se om det i det heletatt finnes interesserte sjeler.

Lenke til kommentar

Selv om det høres interessant ut har jeg desverre ikke tid til å bli med på et slikt prosjekt. Men jeg er litt nysgjerrig på hvor langt du har kommet i arbeidet. Siden du allerede har brukt komponentene dine vil jeg anta at du har grunnelementene på plass, som f.eks. messagehåndteringa? Hvordan har du løst den?

 

Grunnen til at jeg lurer er at jeg også lagde noen prototyper til eget GUI-bibliotek for noen år siden, men det ble aldri noe mer av da jeg startet i jobb. Men jeg husker at det jeg grublet mest på og brukte mye tid på var hvordan oversette meldingene fra operativsystemet til et objektorientert miljø på en mest mulig effektiv måte.

Lenke til kommentar

Det hadde nok gjort seg bedre med et diagram for å forklare akkurat hvordan gangen i det er, men ja -- det grunnleggende er på plass.

 

Jeg kan gi et eksempel på life-span for et vindu. Forutsetningen da er at man har opprettet skjelettet til en dialog-klasse, som arver fra CeDialog.

 

I WinMain kan man da gjøre følgende:

 

CSomeDialog myDialog;
myDialog.doModal(MAKEINTRESOURCE(IDD_SOMEDIALOG));

 

Internt i klassesettet konstrueres da et CeWindow-objekt (som CeDialog arver fra). Denne konstrueringen innebærer blant annet å sette opp en thunk (Se Wikipedia) for fremtidige window messages (heretter WM).

 

Etter at CeDialog+CSomeDialog har blitt konstruert, havner vi i CeDialog::doModal. Der kalles riktig winapi-metode (i denne sammenhengen den modale DialogBoxParam) for konstruksjon av dialogen. Dette gjøres i praksis ikke direkte mot winapiet, men gjennom en singleton factory-klasse. Det er en metode i denne klassen som mottar den første WMen. Når dette skjer, endres windowproc for gjeldende vindu til å peke mot thunken i CeWindow'et som CSomeDialog er en del av, for deretter å sprette videre dit selv. Alle påfølgende meldinger går altså mot CeWindow::windowProc, og etter oppslag i et map, ut i virtuelle metoder for håndering av WMen (eller default window proc for aktuelle vindustype, dersom ikke annet overstyrer).

 

Det var i hvertfall det helt elementære. I virkeligheten skjer det litt flere ting, som bygger oppunder en og annen nifty feature :yes:

 

Med forbehold om skriblefeil og forvirrende hastverksforklaring :)

Endret av einaros
Lenke til kommentar

Grunnen til at jeg har unngått å være plattformuavhengig, er først og fremst arbeidsmengde. Det ville tatt meg enormt mye lengre tid å tilpasse det til flere plattformer -- ikke minst siden Mircosofts kompilator inneholder endel "quirks". Overlater den typen greier til Qt :) Nå er jo f.eks. wxWidgets også plattformuavhengig, og etter hva jeg hører, temmelig greit å jobbe i. Jeg føler allikevel at litt av bruksgleden er utformingen av biblioteket som ligger bakom.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...